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); }
我把部分算法题整理成了PDF文档,截止目前总共有900多页,大家可以下载阅读
链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666