资讯专栏INFORMATION COLUMN

字符串回文实现

hzc / 2960人阅读

摘要:字符串回文如何判断一个字符串是否是回文字符串的问题,我想你应该听过,我们今天的思题目就是基于这个问题的改造版本。

字符串回文

如何判断一个字符串是否是回文字符串的问题,我想你应该听过,我们今天的思题目就是基于这个
问题的改造版本。如果字符串是通过单链表来存储的,那该如何来判断是一个回文串呢?你有什么
好的解决思路呢?相应的时间空间复杂度又是多少呢?

思路:
1.使用快慢指针来找到中间节点
2.在找中间节点的同时复制一份反序的从开头到中间节点的链表prev
3.比较prev链表和slow链表是否相同

代码:

package me.study.algorithm;

/**
 * public class LinkNode {
 *
 *     char val;
 *
 *     LinkNode next;
 *
 *     public LinkNode() {
 *     }
 *
 *     public LinkNode(char val) {
 *         this.val = val;
 *     }
 * }
 */
public class StringBack {


    public boolean clac(LinkNode head) {

        if (head.next == null && head.next == null){
            return true;
        }

            LinkNode prev = null;
            LinkNode slow = head;
            LinkNode fast = head;

            while (fast != null && fast.next != null) {
                fast = fast.next.next;
                LinkNode next = slow.next;
                slow.next = prev;
                prev = slow;
                slow = next;
            }


            if (fast != null) {
                slow = slow.next;
            }

            while (slow != null) {
                if (slow.val != prev.val) {
                    return false;
                }
                slow = slow.next;
                prev = prev.next;
            }

            return true;


    }
}

最好时间复杂度:
最好的情况就是单个字符或者空字符串,时间复杂度为O(1)

最坏时间复杂度:
查找中间节点时间复杂度n/2
比较大小时间复杂度直到最后才比较出是否相等所以为n/2
相加起来最后的时间复杂度为O(n)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73898.html

相关文章

  • 最长回文子串——Manacher 算法

    摘要:问题定义最长回文子串问题给定一个字符串,求它的最长回文子串长度。可以采用动态规划,列举回文串的起点或者终点来解最长回文串问题,无需讨论串长度的奇偶性。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。 如果一个字符串正着读和反着读是一样的,那它就是回文串。下面是一些回文串的实例: 12321 a aba abba aaaa tatt...

    mingzhong 评论0 收藏0
  • [算法总结] 搞定 BAT 面试——几道常见的子符串算法题

    摘要:第一种方法常规方法。如果不存在公共前缀,返回空字符串。注意假设字符串的长度不会超过。说明本题中,我们将空字符串定义为有效的回文串。示例输入输出一个可能的最长回文子序列为。数值为或者字符串不是一个合法的数值则返回。 说明 本文作者:wwwxmu 原文地址:https://www.weiweiblog.cn/13s... 作者的博客站点:https://www.weiweiblog.c...

    chanjarster 评论0 收藏0
  • [Leetcode] Palindrome Permutation 回文变换

    摘要:最笨的方法就是用的解法,找出所有的,然后再用中判断回文的方法来判断结果中是否有回文。而中心对称点如果是字符,该字符会是奇数次,如果在两个字符之间,则所有字符都是出现偶数次。 Palindrome Permutation Given a string, determine if a permutation of the string could form a palindrome. F...

    svtter 评论0 收藏0
  • java算法题:最长回文

    摘要:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。比如不能当做一个回文字符串。注意假设字符串的长度不会超过。代码实现最长回文串回文串是一个正读和反读都一样的字符串,比如或者等等就是回文串。 LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如Aa不能当做一个回文字符串。注 意:...

    Honwhy 评论0 收藏0
  • 获取最长回文子串

    摘要:以下是最长回文子串的相关代码,相关逻辑已在注释中注明我们原有的字符串可能存在两种回文子串,一种是具有基数个元素例如一种是具有偶数个元素例如这样的话分情况判断比较复杂所以我们对原字符串进行扩充在相邻元素中插入特殊值插入后的原基数回文子串变成了 以下是最长回文子串的Manacher‘s Algorithm相关代码,相关逻辑已在注释中注明: public static String solu...

    ymyang 评论0 收藏0

发表评论

0条评论

hzc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<