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.
题目标签:String
题目给了我们一个String s,让我们判断它是否是palindrome,允许我们删除一个char。
利用two pointers,left 和 right 从两边开始,问题在于,当遇到两个 char 不同的时候,我们需要分别删除left 和 right char 去判断它是不是 panlindrome,因为两个选择都有可能是palindrome。
具体看code。
Java Solution:
Runtime beats 98.73%
完成日期:04/20/2018
关键词:two pointers
关键点:用 || 来 测试两个选择性
1 class Solution 2 { 3 public boolean validPalindrome(String s) 4 { 5 char [] arr = s.toCharArray(); 6 int left = 0; 7 int right = arr.length - 1; 8 9 while(left < right) 10 { 11 if(arr[left] != arr[right]) 12 { 13 return isPalindrome(arr, left + 1, right) || isPalindrome(arr, left, right - 1); 14 } 15 16 left++; 17 right--; 18 } 19 20 return true; 21 } 22 23 24 public boolean isPalindrome(char[] arr, int left, int right) 25 { 26 while(left < right) 27 { 28 if(arr[left] != arr[right]) 29 return false; 30 31 left++; 32 right--; 33 } 34 35 return true; 36 } 37 }
参考资料:https://leetcode.com/problems/valid-palindrome-ii/discuss/107716/Java-O(n)-Time-O(1)-Space
LeetCode 题目列表 - LeetCode Questions List
题目来源:https://leetcode.com/