java中利用栈实现字符串回文算法
问题
给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文
简单算法
定义两个下标分别指向字符串的头和尾,每次比较两个下标位置的值是否相等,如果不相等,那么输入的
字符串不是回文,如果相等,左边的下表加1,右边的下表减1,重复上述步骤直至两个下标都指向字符串的正中间或者确定字符串不是回文
/** * 判断字符串是否是回文 */ public int isPalindrome(String inputStr) { int i = 0; int j = inputStr.length(); char[] chars = inputStr.toCharArray(); while (i < j && chars[i] == chars[j]) { i++; j--; } if (i < j) { System.out.println("Not a Palindrome"); return 0; } else { System.out.println("Palindrome"); return 1; } }
利用栈判断是否回文
1.遍历字符数组,
2.在遍历过程中将经过的每个字符(X以前的字符)入栈
3.对于链表的后一半,把每个元素与栈顶元素比较,如果相等,执行一次出栈操作,并且移动到下一个元素继续比较
4.如果比较时出现不相等,那么输入的字符串不是回文
5.继续这个过程,直至栈空或者字符串不是回文
/** * 利用栈判断字符回文 */ public boolean isPalindromeWithStack(String inputStr) { char[] inputChar = inputStr.toCharArray(); LinkedListStack s = new LinkedListStack(); int i = 0; while (inputChar[i] != 'X') { s.push(inputChar[i]); i++; } i++; while (i < inputChar.length) { if (s.isEmpty()) return false; if (inputChar[i] != s.pop()) { return false; } i++; } //将来 return true; }
Java判断是否为回文字符串
题目描述
输入一段字符串序列,字符串可能包括字母,数字,标点符号等类型字符,在判断该字符序列是否为回文时,只需判断字母和数字类型,其它类型自动忽略。
如:“A man, a plan, a canal: Panama” 是一段回文字符串
“race a car”则不是回文字符串
实现方法
从字符串的两端逐个进行比较,若遇到非字母或数字字符则将索引值加一或减一,如果两端字符不同,直接返回false,直到索引值在中间相遇也没有返回false则证明该字符串是回文字符串。
public static boolean isPalindrome(String str){ if(str.equals("")) return true; str = str.toLowerCase();//将字符串的所有大写字母转小写 int start = 0, end = str.length() - 1; //从字符两端分别逐个对比字符,不同则直接返回false while (start < end){ //过滤掉非字母和数字字符 while (!(str.charAt(start) >= 'a' && str.charAt(start) <= 'z' || str.charAt(start) >= '0' && str.charAt(start) <= '9')) start++; //过滤掉非字母和数字字符 while (!(str.charAt(end) >= 'a' && str.charAt(end) <= 'z' || str.charAt(end) >= '0' && str.charAt(end) <= '9')) end--; //若字符不同,则直接返回false if(str.charAt(start) != str.charAt(end)) return false; start++; end--; } return true; }
编程判断字符串是否为回文 判断一个字符串是否是回文,例如单词‘level'
#include <stdio.h> #include <string.h> int main() { char a[100]= {0}; int i = 0; int len = 0; printf("please input character string:\n"); gets(a); len = strlen(a); //计算输入字符串的长度; for(i = 0; i < (len / 2); i++) //只需要判断前一半(len/2)长度就好了 { if(a[i] != a[len - 1 - i]) //判断是否为回文数; { printf("不是回文数\n"); return 0; } } printf("是回文数\n"); return 0; }
到此这篇关于java中利用栈实现字符串回文算法的文章就介绍到这了,更多相关字符串回文算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA2020 Plugins不能用的解决办法及Plugins 搜索不了插件的问题
这篇文章主要介绍了IDEA2020 Plugins不能用的解决办法,文中给大家介绍了Intellij IDEA 2020.1 的Plugins 搜索不了插件,连接超时的问题,本文给大家介绍的非常详细,需要的朋友可以参考下2020-06-06Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪使用小结
分布式跟踪是一种机制,我们可以使用它跟踪整个分布式系统中的特定请求,分布式跟踪允许您跟踪分布式系统中的请求,本文给大家介绍Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪使用小结,感兴趣的朋友一起看看吧2022-03-03SpringBoot @CompentScan excludeFilters配置无效的解决方案
这篇文章主要介绍了SpringBoot @CompentScan excludeFilters配置无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11springboot+quartz以持久化的方式实现定时任务的代码
这篇文章主要介绍了springboot+quartz以持久化的方式实现定时任务的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-07-07
最新评论