leetcode日记(108)验证回文串

leetcode日记(108)验证回文串_第1张图片

看上去很简单,其实很麻烦。

一开始写的递归,但是内存超限……搜了下发现原因是每次递归调用都会创建一个新的字符串副本,这在处理长字符串时会占用大量内存。

class Solution {
public:
    bool isPalindrome(string s) {
        if(s.size()==0||s.size()==1) return 1;
        else if(s[s.size()-1]==s[0]||(s[s.size()-1]-s[0]==32&&s[0]>64&&s[0]<91)||(s[0]-s[s.size()-1]==32&&s[0]>96&&s[0]<123)) return isPalindrome(s.substr(1,s.size()-2));
        else if(s[0]>122||s[0]<48||(s[0]<97&&s[0]>90)||(s[0]>57&&s[0]<65)) return isPalindrome(s.substr(1,s.size()-1));
        else if(s[s.size()-1]>122||s[s.size()-1]<48||(s[s.size()-1]<97&&s[s.size()-1]>90)||(s[s.size()-1]>57&&s[s.size()-1]<65)) return isPalindrome(s.substr(0,s.size()-1));
        else return 0;
    }
};

换成了双指针:

class Solution {
public:
    bool isPalindrome(string s) {
        long int left=0;
        long int right=s.size()-1;
        while(left<=right){
            if(s[left]==s[right]){left++;right--;}
            else if((s[left]-s[right]==32&&s[right]>64&&s[right]<91)||(s[right]-s[left]==32&&s[right]>96&&s[right]<123)){left++;right--;}
            else if(s[left]>122||s[left]<48||(s[left]<97&&s[left]>90)||(s[left]>57&&s[left]<65)) left++;
            else if(s[right]>122||s[right]<48||(s[right]<97&&s[right]>90)||(s[right]>57&&s[right]<65)) right--;
            else return 0;
        }
        return 1;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)