1,双指针解决
题中说了只有小写字母,最简单的就是使用双指针,一个指向前,一个指向后,两个指针同时往中间走,如果两个指针指向的字符不一样就返回false,来看下代码
public boolean judge(String str) {
if (str.length() == 0)
return true;
//两个指针,一个从左边开始,一个从右边开始,每次两个
//指针都同时往中间挪,只要两个指针指向的字符不一样就返回false
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str.charAt(left++) != str.charAt(right--))
return false;
}
return true;
}
2,使用StringBuffer
这题还可以使用StringBuffer,接着反转,最后在判断是否相等。
public boolean judge(String str) {
String rev = new StringBuffer(str).reverse().toString();
return str.equals(rev);
}
3,递归方式实现
如果想玩出花样,我们还可以把第一种的解题思路改为递归的方式, 注意:当所有字符都是相同的并且又很长的时候,会超时
public boolean judge(String str) {
return isPalindromeHelper(str, 0, str.length() - 1);
}
public boolean isPalindromeHelper(String str, int left, int right) {
if (left >= right)
return true;
return str.charAt(left++) == str.charAt(right++) && isPalindromeHelper(str, left, right);
}