一、思想:
1、暴力列舉:
列舉出每個刪除了單個字元後的字串,並判斷是否是回文。很簡單的思想,但提交後會超時。
2、貪心思想
採用雙指標判斷回文,low=0,high=s.size()-1,
(1). 如果是s[low]=s[high],那麼繼續判斷:
low++;
high++;
(2) 當 s[low]!=s[high] 時判斷剩下的字串刪除乙個字元後還是不是回文,即判斷s[low]到s[high-1]以及s[low+1]到s[high],當兩個中有乙個是回文時,即表明刪除乙個後整個字串是回文則返回true,否者,返回false
ps:為什麼會只分別刪除下標為low和high就能判斷刪除後的整體是不是回文呢?而不是像暴力那樣把剩下的一一枚舉出來在判斷?
low前面以及high後面的已經能組成回文了,當s[low]!=s[high]時,判斷刪除s[low]後剩餘的字元能否組成回文,如果能那它就是正確的,如果不能則說明刪除s[low]乙個剩下的不能組成回文需要刪除更多(不滿足題意,題目要求只能刪乙個)。
class
solution
}return
true;}
bool
validpalindrome
(string s)
else
}return
true
;}
力扣 驗證回文字串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false 解法一 篩選和判斷 把字串轉換為...
680 驗證回文字串
給定乙個非空字串 s,最多刪除乙個字元。判斷是否能成為回文字串。示例 1 輸入 aba 輸出 true 示例 2 輸入 abca 輸出 true 解釋 你可以刪除c字元。注意 字串只包含從 a z 的小寫字母。字串的最大長度是50000。分析 使用雙指標,在第乙個不相等的位置略過左邊或右邊的乙個字元...
680 驗證回文字串
給定乙個非空字串 s,最多刪除乙個字元。判斷是否能成為回文字串。示例 1 輸入 aba 輸出 true 示例 2 輸入 abca 輸出 true 解釋 你可以刪除c字元。注意 字串只包含從 a z 的小寫字母。字串的最大長度是50000。class solution int i 0,j len 1 ...