zoukankan      html  css  js  c++  java
  • leetcode-680-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:

    1. The string will only contain lowercase characters a-z. The maximum length of the string is 50000.

     

    要完成的函数:

    bool validPalindrome(string s) 

    说明:

    1、给定一个字符串,至多删去里面的一个字符,使其成为一个回文串。判断能不能实现。

    2、我们先看一个例子

    abca

    acba(反转)

    我们可以看到第一个字母是一样的,第二个字母的时候就对不上了,那我们如果要形成一个回文串,可以试着删去第二个字母b,也可以删去从后面数起第二个字母c,只要之后能一一对上,那么还是一个回文串。

    关于这两种情况,给两个例子来说明一下:

    ececabbacec,这个字符串,我们看到第一个字符e和最后一个字符c没对上,我们可以删去e,这样子能形成回文串。我们也能删去c,但这样形成不了回文串。这是要删去前面字符的例子。

    abbca,这个字符串,如果删去前面字符b,那么形成不了回文串,如果删去后面字符c,刚好能形成回文串。这是要删去后面字符的例子。

    所以我们要分成两种情况来判断处理。

    按照上述逻辑来处理一下,构造如下代码:(附解释)

        bool validPalindrome(string s) 
        {
            int i=0,j=s.size()-1;
            while(i<j)
            {
                if(s[i]!=s[j])//当碰到对不上的时候,记录i和j的值
                    break;
                i++;
                j--; 
            }
            int i1=i,j1=j;//记录一个副本
            i++;//如果删去前面的字符,i++,处理下一个
            bool flag=1;
            while(i<j)
            {
                if(s[i]!=s[j])//如果出现第二次对不上的情况
                {
                    flag=0;
                    break;
                }
                i++;
                j--;
            }
            if(flag==1)//如果全程都对得上,那么返回true
                return true;
            j1--;//如果删去前面的字符对不上了,那么删去后面的字符试试
            while(i1<j1)
            {
                if(s[i1]!=s[j1])//如果还是对不上,返回false
                    return false;
                i1++;
                j1--;
            }
            return true;//如果全程对得上,那么返回true
        }

    上述代码实测119ms,beats 90.33% of cpp submissions。

  • 相关阅读:
    LeetCode算法题-Reverse String II(Java实现)
    LeetCode算法题-Convert BST to Greater Tree(Java实现)
    LeetCode算法题-K-diff Pairs in an Array(Java实现)
    LeetCode算法题-Minimum Absolute Difference in BST(Java实现)
    基于Bootstrap和Knockout.js的ASP.NET MVC开发实战 关于 拦截器的 学习 部分
    基于bootstrap和knockoutjs使用 mvc 查询
    Kindle Unlimited 上线的最热书单
    基于Bootstrap和Knockout.js的ASP.NET MVC开发实战
    程序员的数学
    数学女孩
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9026644.html
Copyright © 2011-2022 走看看