leetcode-680. 验证回文字符串 Ⅱ刷题笔记(c++)

写在前面

  • 难度:简单,,,
  • 已弃疗,学大牛思想

题目详情

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

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

	输入: "abca"
	输出: True
	解释: 你可以删除c字符。
注意:

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

ac代码

  • 算法思想
    • 字符串可能包含0个或1个要删除字符
      • 删掉左边的字符,剩下的是否为回文?
      • 删掉右边的字符,剩下的是否为回文?
class Solution
{
public:
    bool validPalindrome(string s)
    {
        int l = 0;
        int r = s.size() -1;
        while(l<r && s[l] == s[r])
        {
            l++;
            r--;
        }
        if(l>=r)
            return true;

        int l1 = l+1;
        int r1 = r;
        while(l1 < r1 && s[l1] == s[r1])
        {
            l1++;
            r1--;
        }
        if(l1 >= r1)
            return true;
        int l2 = l;
        int r2 = r-1;
        while(l2 < r2 && s[l2] == s[r2])
        {
            l2++;
            r2--;
        }
        if(l2 >= r2)
            return true;

        return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章