zoukankan      html  css  js  c++  java
  • 680. 验证回文字符串 Ⅱ

    给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
    注意:
    字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

    示例 1:
    输入: "aba"
    输出: True

    示例 2:
    输入: "abca"
    输出: True
    解释: 你可以删除c字符。

    注意: 1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。


    
    
    思路:
    双指针:i从下标0往后、j从下标len(s)-1往前;
    当不匹配时,将i或j向前移动一步,再进行匹配;
    关键:不匹配时先移动哪个指针。
     1 class Solution(object):
     2     def validPalindrome(self, s):
     3         """
     4         :type s: str
     5         :rtype: bool
     6         """
     7         # 设置双指针
     8         i, j = 0, len(s) - 1
     9         # 设置标记——确保最多删除一个字符
    10         flag = True
    11         while i < j:
    12             if s[i] != s[j]:
    13                 # 若遇到不回文,先判断标记:若为true说明之前没有遇到过不回文
    14                 if not flag:
    15                     return False
    16                 # 若i移动之后回文
    17                 if s[i+1:j][::-1] == s[i+1:j]:
    18                     i += 1
    19                     # 调整过指针后要将标记置否
    20                     flag = False
    21                 # 若j移动之后回文
    22                 elif s[i:j-1][::-1] == s[i:j-1]:
    23                     j -= 1
    24                     # 调整过指针后要将标记置否
    25                     flag = False
    26                 else:
    27                     return False
    28             # 回文则正常移动指针
    29             else:
    30                 i += 1
    31                 j -= 1
    32         return True
    33 
    34 if __name__ == '__main__':
    35     solution = Solution()
    36     print(solution.validPalindrome("eeccccbebaeeabebccceea"))
     
     
     
  • 相关阅读:
    排序算法合集(冒泡,选择,插入,堆排,快排)
    codeforces 632+ E. Thief in a Shop
    nyoj-一笔画问题-欧拉图+联通判定
    hdu-1179-二分图最大匹配
    hdu-2063-二分图最大匹配
    (转)二分图的最大匹配、完美匹配和匈牙利算法
    hdu-2444-二分图判定+最大分配
    C
    E
    C
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12697674.html
Copyright © 2011-2022 走看看