[leetcode/lintcode問題解]有効回文II・Valid Palindrome II
3730 ワード
【タイトル説明】
空でない文字列
オンライン評価アドレス:https://www.lintcode.com/problem/valid-palindrome-ii/?utm_source=sc-bky-zq
【例】
例1:
例2:
例3:
【問題解】
二重ポインタアルゴリズム.両端から真ん中まで歩いて、最初のペアの異なる文字を見つけた後、左を削除するか、右を削除します.
【参考答案】
https://www.jiuzhang.com/solution/valid-palindrome-ii/?utm_source=sc-bky-zq
空でない文字列
s
に、最大1文字を削除できます.それを文字列に変えることができるかどうかを判断します.オンライン評価アドレス:https://www.lintcode.com/problem/valid-palindrome-ii/?utm_source=sc-bky-zq
【例】
例1:
: s = "aba"
: true
:
例2:
: s = "abca"
: true
: 'b' 'c'
例3:
: s = "abc"
: false
:
【問題解】
二重ポインタアルゴリズム.両端から真ん中まで歩いて、最初のペアの異なる文字を見つけた後、左を削除するか、右を削除します.
class Solution {
public boolean validPalindrome(String s) {
int left = 0, right = s.length() - 1;
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
break;
}
left++;
right--;
}
if (left >= right) {
return true;
}
return isSubPalindrome(s, left + 1, right) || isSubPalindrome(s, left, right - 1);
}
private boolean isSubPalindrome(String s, int left, int right) {
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
【参考答案】
https://www.jiuzhang.com/solution/valid-palindrome-ii/?utm_source=sc-bky-zq