題目
給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。
思路
驗證是否是迴文字符,至少需要O(n)的時間複雜度。
因爲至多刪除一個字符,因此在刪除一個字符之後,進行判斷剩下的字符是否能構成迴文字符串即可。
代碼
class Solution {
public boolean validPalindrome(String s) {
int len = s.length();
//最少時間複雜度:O(n)
int lo = 0;
int hi = len-1;
while(lo<hi){
if(s.charAt(lo)==s.charAt(hi)){
lo++;
hi--;
}else{
boolean flagA=true;
boolean flagB=true;
for(int i=lo, j=hi-1;i<j;i++,j--){
if(s.charAt(i)!=s.charAt(j)){
flagA=false;
break;
}
}
for(int i=lo+1, j=hi;i<j;i++,j--){
if(s.charAt(i)!=s.charAt(j)){
flagB=false;
break;
}
}
return flagA||flagB;
}
}
return true;
}
}
複雜度分析
- 時間複雜度:O(n)
- 空間複雜度:O(1)