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'.

這題是'Easy',但是值得一做。我一開始審題不清,沒注意at most這個(gè)詞,以為必須要?jiǎng)h掉一個(gè)了,結(jié)果寫了個(gè)O(m*n)的做法,把每個(gè)字母都去掉一遍,然后reverse,看跟原串是否一致。
后來我有個(gè)一個(gè)思路,第一次遇到不一致的,就跳過,左邊跳還是右邊跳要判斷一下,但是沒法AC,感覺這做法確實(shí)有問題。

最后我又有了個(gè)思路:
遇到不一致的,直接把響應(yīng)的兩個(gè)都char都去掉,reverse一下(其實(shí)不需要reverse..首位對比就行),如果有一個(gè)等于原串,就return true。AC了。

    public boolean validPalindrome(String s) {
        if (s == null) return true;
        boolean firstTime = true;
        int start = 0, end = s.length() - 1;
        while (start < end) {
            if (s.charAt(start) != s.charAt(end)) {
                String t1 = s.substring(0, start) + s.substring(start + 1);
                String t2 = s.substring(0, end) + s.substring(end + 1);
                if (reverse(t1).equals(t1) || reverse(t2).equals(t2)) {
                    return true;
                } else
                    return false;
            }
            start++;
            end--;
        }
        return true;
    }

    private String reverse(String s) {
        StringBuilder sb = new StringBuilder(s.length());
        int end = s.length() - 1;
        for (int i = end; i >= 0; i--) {
            sb.append(s.charAt(i));
        }
        return sb.toString();
    }

別人的寫法:

public boolean validPalindrome(String s) {
    int l = -1, r = s.length();
    while (++l < --r) 
        if (s.charAt(l) != s.charAt(r)) 
       //這寫法挺賊的
        return isPalindromic(s, l, r+1) || isPalindromic(s, l-1, r);
    return true;
}
public boolean isPalindromic(String s, int l, int r) {
    while (++l < --r) 
        if (s.charAt(l) != s.charAt(r)) return false;
    return true;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容