leetcode:Valid Palindrome

一、     題目

題目給出一個字符串,求出它是否爲迴文字符串,其中只有字母和數字是有效字符,其他的字符可以忽略。

例如:"Aman, a plan, a canal: Panama" 是迴文字符串.

"race a car" is not a palindrome.不是迴文字符串

二、     分析

看到這個題目我首先想到的是使用兩個數組將有效字符串保存,其中一個正序一個逆序,然後做比較。但是考慮到效率和空間使用,可以使用“兩指針法”,即設置一個左指針一個右指針,相向移動,判斷他們的有效值是否相等,不相等則直接false,直到相遇。


class Solution {
public:
	//判斷字符是不是字母或字符 
	bool isAlphanumeric(char c)
     {
         if((c >= 'a' && c <= 'z')||(c >= 'A' && c <= 'Z')||(c >= '0' && c <= '9'))
             return true;
         else return false;
     }
    bool isPalindrome(string s) {
        
        int len = s.size();
        //判斷是否爲空,爲空則返回真 
        if(len == 0) return true;
        int left=0;
        int right = len-1;
        while(left<right){
        	//注意判斷left是否小於len,當時就卡在這了 
        	if(!isAlphanumeric(s[left])&&left<=len-1){
        		left++;
        	}
        	else if(!isAlphanumeric(s[right])&&right>=0){
        		right--;
        	}
        	else {
        		//注意字母的大小寫,這裏只需要判斷字母是否相等或差的絕對值是否爲32 
        		if(s[left] != s[right]&&fabs(s[left]-s[right])!=32)
        			return false;
        		left++;
        		right--;
			}
        }
        return true;
    }
};


發佈了164 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章