leetCode 125. Valid Palindrome 字符串
125. Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,"A man, a plan, a canal: Panama"
is a palindrome."race a car"
isnota palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
题目大意:
回文的检测。
思路:
1.清洗字符串,得到只有数字和字母的字符串。
2.通过比较首尾的字符来判断。
代码如下:
classSolution{public:vector<string>stringSplit(strings,constchar*split){vector<string>result;constintsLen=s.length();char*cs=newchar[sLen+1];strcpy(cs,s.data());char*p;p=strtok(cs,split);while(p){printf("%s\n",p);stringtmp(p);result.push_back(tmp);p=strtok(NULL,split);}returnresult;}boolisPalindrome(strings){if(s.size()==0||s.size()==1)returntrue;vector<string>vecStrs=stringSplit(s,"~!@#$%^&*().,:;-?\"'`");s="";for(inti=0;i<vecStrs.size();i++)s+=vecStrs[i];if(s.size()==1||s.size()==0)returntrue;inti=0;for(;i<s.size()/2;i++){if(s[i]<=57||s[s.size()-i-1]<=57){if(s[i]==s[s.size()-i-1]){continue;}else{returnfalse;}}elseif(s[i]==s[s.size()-i-1]||s[i]-s[s.size()-i-1]==32||s[s.size()-i-1]-s[i]==32){continue;}else{returnfalse;}}returntrue;}};
上面的做法效率低下,还有对API不熟悉。
下面是对上面的改进:
参考https://discuss.leetcode.com/topic/48376/12ms-c-clean-solution
代码如下:
classSolution{public:boolisPalindrome(strings){inti=0,j=s.size()-1;while(i<j){while(!isalnum(s[i])&&i<j)i++;while(!isalnum(s[j])&&i<j)j--;if(tolower(s[i++])!=tolower(s[j--]))returnfalse;}returntrue;}};
这里使用了isalnum()函数来判断是否为文字数字。
通过使用tolower()来统一字符的大小写,都变为小写。
2016-08-11 13:26:25
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。