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

如果觉得有用就给个赞吧,还可以关注我的《牛客博客》查看更多的详细题解