题目描述:
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: TrueExplanation: You could delete the character 'c'.
Note:
- 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
上述代码实测119ms,beats 90.33% of cpp submissions。