【数据结构和算法】双指针解决

判断回文

http://www.nowcoder.com/questionTerminal/e297fdd8e9f543059b0b5f05f3a7f3b2

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);
    }

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

数据结构和算法 文章被收录于专栏

专注于算法题的讲解,包含常见数据结构,排序,查找,动态规划,回溯算法,贪心算法,双指针,BFS和DFS等等。

全部评论
最后一个递归方法应该是right--吧
1 回复 分享
发布于 2022-02-09 20:51
++错了吧
点赞 回复 分享
发布于 2023-04-25 15:34 北京
第一个双指针有问题但是改一改就可以了
点赞 回复 分享
发布于 2022-04-02 16:42

相关推荐

06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
24
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务