125. 驗證迴文串(C++)680. 驗證迴文字符串 Ⅱ(C++)

125. 驗證迴文串

給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。

說明:本題中,我們將空字符串定義爲有效的迴文串。

示例 1:

輸入: "A man, a plan, a canal: Panama"
輸出: true
示例 2:

輸入: "race a car"
輸出: false


——題目難度:簡單
 

class Solution {
public:
    bool isPalindrome(string s) {
		//將字母和數字字符單獨保存在str中 
		string str;
		for(auto c : s) {
			if(islower(c) || isdigit(c)) { //小寫字母和數字字符直接保存 
				str += c;
			}else if(isupper(c)) { //大寫字母則轉化爲小寫字母再保存 
				str += (c+32);
			}
		}
		
		int len = str.size();
		if(len==0) return true;
		int l = 0;
		int r = len - 1;
		while(l < r && str.at(l) == str.at(r)) {
			l++;
			r--;
		}
		if(l>=r) return true;
		
		
		return false;
    }
};




 





680. 驗證迴文字符串 Ⅱ

給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。

示例 1:

輸入: "aba"
輸出: True
示例 2:

輸入: "abca"
輸出: True
解釋: 你可以刪除c字符。
注意:

字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。


——題目難度:簡單
 

class Solution {
public:
    bool validPalindrome(string s) {
    		int l = 0;
            int r = s.size() - 1;
            
            while(l < r && s[l] == s[r]) {
            	l++;
            	r--;
            }
            if(l>=r) return true;
            
            //模擬刪除一個字符的操作 
            int l1 = l + 1; //嘗試跳過 s[l]字符和 s[r]字符的判斷 
			int r1 = r; //並直接開始 s[l+1]字符和 s[r]字符的判斷 
			while(l1 < r1 && s[l1] == s[r1]) {
				l1++;
				r1--;
			}
			if(l1>=r1) return true;
			
			int l2 = l; //嘗試跳過 s[l]字符和 s[r]字符的判斷 
			int r2 = r - 1; //並直接開始 s[l]字符和 s[r-1]字符的判斷
			while(l2 < r2 && s[l2] == s[r2]) {
				l2++;
				r2--;
			}
			if(l2>=r2) return true;
			
			
			return false;
		}
    
};






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章