题解 | #牛群编号的回文顺序II#

牛群编号的回文顺序II

https://www.nowcoder.com/practice/e887280579bb4d91934378ea359f632e

  • 题目考察的知识点 : 回文理解,中心扩散法
  • 题目解答方法的文字分析:
  1. 遍历链表保存所有节点的值到字符串vals中
  2. 从字符串vals中查找最大回文子串的长度和位置
  3. 根据最大回文子串的开始和结束位置,在链表中定位对应的节点
  4. 设置对应的节点next指针,断开最大回文子链表
  5. 如果整个链表就是回文,返回None
  • 本题解析所用的编程语言:Python
  • 完整且正确的编程代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @return ListNode类
#
class Solution:
    def maxPalindrome(self, head: ListNode) -> ListNode:
        vals = ""
        cur = head 
        while cur:
            vals += str(cur.val)
            cur = cur.next

        n = len(vals)
        maxLen = 0
        maxLeft = 0
        maxRight = 0

        for i in range(2*n-1):
            left = i // 2
            right = (i + 1) // 2
        
            while left >= 0 and right < n and vals[left] == vals[right]:
                if right - left + 1 > maxLen:
                    maxLen = right - left + 1
                    maxLeft = left
                    maxRight = right
                left -= 1
                right += 1
            
        if maxLen == n:
            return None
    
        cur = head
        for i in range(maxLeft):
            cur = cur.next
        res = cur
    
        for i in range(maxRight - maxLeft):
            cur = cur.next
        cur.next = None
    
        return res
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

头像
10-27 15:50
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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