• 680. Valid Palindrome II


    ▶ 问题:判断一个字符串是否能通过删除至多一个字符来变成回文串。

    ▶ 算法:

    ● 使用两个指针,开始时分别指向字符串的首元素和末元素,进行回文检查。若检查到两指针重叠或交换,则说明输入字符串已经是回文,返回正确。

    ● 若检查到中间某一位置时发现两指针指向的元素不相等,则假设这两个元素之一是多余的元素,做两件事:①去掉此时的首元素,检查剩下的部分是否是回文;②去掉此时的末元素,检查剩下的部分是否是回文。若其中一个返回是,则函数返回正确;若两种情况均返回否,则函数返回错误。

    ● 代码,139 ms,最快的解法算法与之相同

     1 class Solution
     2 {
     3 public:
     4     bool isPalindromeRange(string s, int i, int j)
     5     {
     6         for (int k = i; k <= i + (j - i) / 2; k++)
     7         {
     8             if (s[k] != s[j - k + i])
     9                 return false;
    10         }
    11         return true;
    12     }
    13     bool validPalindrome(string s)
    14     {
    15         for (int i = 0; i < s.length() / 2; i++)
    16         {
    17             if (s[i] != s[s.size() - 1 - i])
    18             {
    19                 int j = s.size() - 1 - i;
    20                 return isPalindromeRange(s, i + 1, j) || isPalindromeRange(s, i, j - 1);
    21             }
    22         }
    23         return true;
    24     }
    25 };
  • 相关阅读:
    Antd表格跨行
    Echarts使用记录
    PAT甲级刷题实录——1010
    PAT甲级刷题实录——1009(写文章时又想到了改进方法)
    PAT甲级刷题实录——1008
    PAT甲级刷题实录——1007
    PAT甲级刷题实录——1006
    PAT甲级刷题实录——1005
    PAT甲级刷题实录——1004
    PAT甲级刷题实录——1003
  • 原文地址:https://www.cnblogs.com/cuancuancuanhao/p/8094453.html
Copyright © 2020-2023  润新知