1. 程式人生 > >leetcode 125 Valid Palindrome(判斷迴文字元)

leetcode 125 Valid Palindrome(判斷迴文字元)

題目要求

給定一個字串,確定它是否是迴文,僅考慮字母數字字元並忽略大小寫。
注意:空字串定義為有效迴文。

解題思路

本題可以算是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()來判斷是否為數字和字母。

原題連結:https://leetcode.com/problems/valid-palindrome/