判斷乙個字串是否是回文串,忽略掉除了字母和數字外的字元。
兩個指標,乙個指標從頭進行,乙個指標從尾部進行。依次判斷兩個指標的字元是否相等,同時要跳過非法字元。需要注意的是,兩個指標不用從頭到尾遍歷,當兩個指標相遇的時候就意味著這個字串是回文串了。
還需要注意的是'a' == 'a'
,也就是大寫字母和小寫字母是相同的。
public
boolean
ispalindrome
(string s)
}while(!
isalphanumeric
(s.charat
(j)))if
(s.charat
(i)!= s.
charat
(j))
i++; j--;}
return
true;}
private
boolean
isalphanumeric
(char c)
return
false
;}
上邊的是常規的思路,這裡分享另乙個 思路 。
上邊為了處理大小寫字母的問題,首先全部統一為了小寫。為了找出非法字元,每次都需要判斷一下該字元是否在合法範圍內。
這裡用乙個技巧,把'0'
到'9'
對映到1
到10
,'a'
到'z'
對映到11
到36
,'a'
到'z'
也對映到11
到36
。然後把所有數字和字母用乙個char
陣列存起來,沒存的字元就預設對映到0
了。
這樣只需要判斷字串中每個字母對映過去的數字是否相等,如果是0
就意味著它是非法字元。
private
static
final
char
charmap =
newchar
[256];
static
// 對映 'a' 到 'z' 和 對映 'a' 到 'z'
for(
int i =
0; i <
26; i++)}
public
boolean
ispalindrome
(string s)
else
}return
true
;}
很簡單的一道題了,值得注意的就是解法二將所有字母進行對映,同時將大小寫字母對映到同乙個數字的想法,省了很多事,速度會提公升一些。也可以做一下 第 5 題 ,給定乙個字串,找出最長的回文子串,裡邊的介紹的馬拉車演算法是真的太強了。
更多詳細通俗題解詳見 leetcode.wang 。
力扣125 驗證回文串(雙指標 內建函式)
力扣125.驗證回文串 雙指標 內建函式 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 f...
力扣125 驗證回文串 C語言實現 簡單題
傳送門 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false bool ispalin...
打家劫舍 力扣 LeetCode
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...