问题描述
我目前正在尝试解决此问题,并且似乎一直在遇到此问题StringOutOfBoundsException
,有人可以向我解释原因吗?
当我退出while循环时,似乎我输错了endPtr-;
class Solution {
public boolean ispalindrome(String s) {
if (s == null) {
throw new Ille@R_502_6491@ArgumentException("Ille@R_502_6491@ input!");
}
if (s.length() <= 1) {
return true;
}
int startPtr = 0;
int endPtr = s.length() - 1;
while (startPtr < endPtr) {
while (startPtr < endPtr && !Character.isLetterOrDigit(s.charat(startPtr))) {
startPtr++;
}
//ERROR while (startPtr < endPtr && !Character.isLetterOrDigit(s.charat(endPtr))) {
//endPtr--;
//}
if (startPtr < endPtr && Character.toLowerCase(s.charat(startPtr)) != Character.toLowerCase(s.charat(endPtr))) {
return false;
}
startPtr++;
endPtr++;
}
return true;
}
}
解决方法
在主循环的最后,您要增加endPtr。
startPtr++;
endPtr++;
这样做,您是将String的结尾定位在实际结尾之后。
然后是错误。
而且,由于条件,您正在创建一个无限循环
while (startPtr < endPtr)
将始终为真。