• 剑指 Offer II 019. 最多删除一个字符得到回文


    给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。

     

    示例 1:

    输入: s = "aba"
    输出: true

    示例 2:

    输入: s = "abca"
    输出: true
    解释: 可以删除 "c" 字符 或者 "b" 字符

    示例 3:

    输入: s = "abc"
    输出: false

     

    提示:

        1 <= s.length <= 105
        s 由小写英文字母组成


    解析:

      双指针,一个从前向后,一个从后向前,如果有不同,判断删除第一次出现的不同的字符就可以(注意这里要判断两次,不同的两个字符分别删)

      因为之后的不同必须保证 第一次出现不同的地方相同

      

    class Solution {
    public:
        bool validPalindrome(string s) {
            int l = 0, r = s.length() - 1;
            int flag = 0;
            while(l < r)
            {
                if(s[l] != s[r] && flag == 0)
                {
                    flag = 1;
                    r--;
                }
                else if(s[l] != s[r])
                {
                    break;
                }
                else
                    l++, r--;
            }
            if(flag == 0 || l >= r) return true;
            flag = 0;
            l = 0, r = s.length() - 1;
            while(l < r)
            {
                if(s[l] != s[r] && flag == 0)
                {
                    flag = 1;
                    l++;
                }
                else if(s[l] != s[r])
                {
                    break;
                }
                else
                    l++, r--;
            }
            if(flag == 0 || l >= r) return true;
            return false;
        }
    };
  • 相关阅读:
    C#学习笔记
    Visual Studio 快捷键
    java 8 中lambda表达式学习
    Spfa算法
    dijkstra算法
    topSort
    并查集--学习详解
    trie树--详解
    POJ1988 并查集的使用
    Mybatis的一级缓存和二级缓存
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/16104493.html
Copyright © 2020-2023  润新知