zoukankan      html  css  js  c++  java
  • 【leetcode】Valid Palindrome II

    很久没有做题了,今天写个简单难度的练练手感。

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.
    
    Example 1:
    Input: "aba"
    Output: True
    Example 2:
    Input: "abca"
    Output: True

    Explanation: You could delete the character 'c'. Note: The string will only contain lowercase characters a-z. The maximum length of the string is 50000.

    分析:这个题目的要求是判断回文,但是增加了一点难度,可以删掉至多一个字符。所以,我们可以从字符串的两头往中间进行每个字符的比较。先比较s[0]和s[len(s)-1],如果相同的话,低位+1,高位-1,直到找到两个字符不同为止。因为可以删除一个字符,所以还需要判断s[低位+1] == s[高位] 和 s[低位] == s[高位-1],如果满足其中一个条件,那么对应位置+1或者-1继续比较。如果两个都满足,我的方法是先比较s[低位] == s[高位-1],如果不是回文,再来比较s[低位+1] == s[高位]。

    代码:

    class Solution(object):
        def validPalindrome(self, s):
            """
            :type s: str
            :rtype: bool
            """
            low = 0;
            high = len(s)-1
            isDel = False
            fisrtFlag = false
            firstLow = 0
            firstHigh = 0
            ret = True
            while low < high:
                if s[low] == s[high]:
                    low += 1
                    high -= 1
                    continue
                else:
                    if isDel == True:
                        ret = False
                        break
                    if s[low] != s[high-1] and s[low+1] != s[high]:
                        ret = False
                        break
                    elif s[low] == s[high-1]:
                        firstLow = low
                        firstHigh = high-1
                        fisrtFlag = True
                        high -= 1
                        isDel = True
                    elif s[low+1] == s[high]:
                        low += 1
                        isDel = True
    #再比较异常
    if ret == False and fisrtFlag == True: ret = True low = firstLow + 1 high = firstHigh + 1 while low < high: if s[low] == s[high]: low += 1 high -= 1 continue else: ret = False break return ret
  • 相关阅读:
    Android周学习Step By Step(6)Android的数据库SQLite
    Android周学习Step By Step(2)HelloWorld
    解决方案(.sln)文件
    浅谈测试(1)单元测试
    批量上传功能的实现
    分页控件AspNetPager的用法
    .net下验证码的简单实现
    window.alert重写实现友好的对话框(支持IE)
    网页上自定义运行和测试HTML脚本
    数据库行转列的sql语句(zt)
  • 原文地址:https://www.cnblogs.com/seyjs/p/7576043.html
Copyright © 2011-2022 走看看