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"))
     
     
     
  • 相关阅读:
    mysql truncate
    蠕虫复制
    mysql 一对多,多对多
    php实现文件下载
    JetBrains PhpStorm 整个项目中查找一个词语
    vim
    程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
    创建你的第一个Composer/Packagist包
    Elasticsearch
    Laravel 实践之路: 数据库迁移与数据填充
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12697674.html
Copyright © 2011-2022 走看看