编写以下方法来确定其String参数是否从左到右和从右到左读取相同(即所谓的回文)。我很难找到此回文的逻辑错误。我相信错误是整个循环中的两个条件会影响检查字符串中的字符。如果我错了,请纠正我,以便提出正确的解决方案。
对于你们中的许多人来说这可能是一个愚蠢的问题,但是我对Java编程还是陌生的,如果可以的话,这是书面问题,不是实际代码。
答案 0 :(得分:1)
仅当输入字符串的长度为奇数(即1,3,5等)时,您的逻辑才会起作用。 因为如果长度是偶数,我将永远不会等于j。字符串“ abba”的示例:
while (i == j && S.charAt(i) == S.charAt(j)) { // i = 0, j = 3
i++;
j--;
}
iteration-2:
while (i <= j && S.charAt(i) == S.charAt(j)) { // i = 1 , j = 2
i++;
j--;
}
iteration-3:
while (i <= j && S.charAt(i) == S.charAt(j)) { // i = 2 , j = 1
i++;
j--;
}
当我达到负值并且j达到大于字符串长度的值时,这最终将导致StringIndexOutOfBoundsException。
尝试以下代码:
static boolean isPalidrome(String s) {
int i = 0;
int j = s.length() - 1;
while( i <= j && s.charAt(i) == s.charAt(j)) {
i ++;
j--;
}
return i >= j;
}
答案 1 :(得分:0)
如果输入字符串是“ zz”或“ xxxx”之类的字符,则您的代码将失败,这意味着即使是相同字符的长度也是如此,因此理想情况下,您可以尝试使用以下内容:
public static boolean isPal(String str) {
int start = 0;
int end = str.length() - 1;
while (start < end) {
final char f = str.charAt(start++);
final char b = str.charAt(end--);
if (f != b) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
您可以在自己的代码中应用以下更改。 while
循环的终止条件(即i <= j
和返回条件(i >= j)
public static boolean isPalindrome(String S) {
int i = 0, j = S.length() - 1;
while (i <= j && S.charAt(i) == S.charAt(j)) {
i++;
j--;
}
return (i >= j);
}