---
tags: 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:
> The string will **only contain lowercase characters a-z**. The maximum length of the string is 50000.
輸入範本如下
```C#
public class Solution {
public bool ValidPalindrome(string s) {
}
}
```
### 直覺想法
判斷這是不是一個迴文 , 但是允許忽略一個字.
因為不知道應該忽略左邊還是右邊的字 , 所以在判斷迴文時 , 若遇到不同的字時 , 需要兩個都做一遍 (忽略左邊的字 , 去看剩下的字是否迴文 , 以及忽略右邊的字去看剩下的字是否迴文)
1. 遞迴解
- 需要將已經忽略字的情報傳下去.
- 判斷剩下的字是否為迴文
```C#
88 ms 42.9 MB
You are here!
Your runtime beats 93.51 % of csharp submissions
public bool ValidPalindrome(string s)
{
return IsPalindrome(s, false);
bool IsPalindrome(string str, bool hasIgnore)
{
for (int l = 0, r = str.Length - 1; l < r; l++, r--)
{
if (str[l] != str[r])
{
if (hasIgnore) return false;
return IsPalindrome(str.Substring(l + 1, r - (l + 1) + 1), true) ||
IsPalindrome(str.Substring(l, (r - 1) - l + 1), true);
}
}
return true;
}
}
```
2. 迴圈解
- 遇到不同字時 , 分別判斷忽略左右字後的結果是否為迴文
```C#
88 ms 42.7 MB
You are here!
Your runtime beats 93.51 % of csharp submissions.
public bool ValidPalindrome(string s)
{
for (int l = 0, r = s.Length - 1; l < r; l++, r--)
{
if (s[l] != s[r])
{
return IsPalindrome(s.Substring(l + 1, r - (l + 1) + 1)) ||
IsPalindrome(s.Substring(l, (r - 1) - l + 1));
}
}
return true;
bool IsPalindrome(string str)
{
for (int l = 0, r = str.Length - 1; l < r; l++, r--)
{
if (str[l] != str[r])
{
return false;
}
}
return true;
}
}
```
### Thank you!
You can find me on
- [GitHub](https://github.com/s0920832252)
- [Facebook](https://www.facebook.com/fourtune.chen)
若有謬誤 , 煩請告知 , 新手發帖請多包涵
# :100: :muscle: :tada: :sheep: