问题
给定一个由多个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;
}