leetcode 125 Valid Palindrome(判斷迴文字元)
阿新 • • 發佈:2018-12-31
題目要求
給定一個字串,確定它是否是迴文,僅考慮字母數字字元並忽略大小寫。
注意:空字串定義為有效迴文。
解題思路
本題可以算是leetcode9 判斷是不是迴文數 的升級版,不同的是,本題字元中包含了字母,數字,空格,標點等特殊字元,所以在處理上和9題還是有點不同。
首先我們先將輸入的字串s 進行反轉,並且儲存下來,記為r。
然後只要比較r,s是不是相等即可,但是這裡需要注意(去除符號和統一大小寫):
根據題目要求,我們僅僅考慮字母和數字並且忽略大小寫,所以要使用 isalnum()函式 來判斷當前遍歷的元素是不是字母或者數字,只有在是的時候才進行後續操作。並且通過使用tolower() / toupper() 函式來統一大/小寫。
最後用兩個變數來儲存處理後的s和r。比較s,r得到結果。
主要程式碼 c++
class Solution {
public:
bool isPalindrome(string s) {
string ori,rev;
string r =s;
reverse(r.begin(),r.end());
for(int i=0;i<s.size(); i++)
{
// 去除符號,統一大小寫
if(isalnum(s[i])) ori + = tolower(s[i]);
if(isalnum(r[i])) rev += tolower(r[i]);
}
return ori==rev;
}
};
特別地
reverse(start,end) 函式實現方式:迴圈交換首尾元素。因此複雜度是線性的,並且迴圈半個陣列長度。
使用函式tolower() / toupper() 統一大小寫。
使用函式isalnum()來判斷是否為數字和字母。