标签:
判断字符串是否是回文。
字母、数字都算在内;空串也是回文。
【思路】
经典回文,两个指针,一个从前向后遍历,一个从后向前,遇到不是要求字符的就跳过。
前后指针位置交叉(i>j),则遍历结束。
特殊的地方在于,包含字母和数字,如果一一排除,代码很繁琐。
【my code】
bool isPalindrome(string s) { if(s=="") return true; int length=s.size(); int i=0,j=length-1; while(i<=j){ //while(!((s[i]>=‘a‘&&s[i]<=‘z‘)||(s[i]>=‘A‘&&s[i]<=‘Z‘))&&i<j) while((s[i]==‘ ‘||ispunct(s[i]))&&i<j) i++; //while(!((s[j]>=‘a‘&&s[j]<=‘z‘)||(s[j]>=‘A‘&&s[j]<=‘Z‘))&&i<j) while((s[j]==‘ ‘||ispunct(s[j]))&&i<j) j--; if(i<=j&&((s[i]==s[j])||abs(s[i]-s[j])==32)){ i++; j--; } else return false; } return true; }
【评价】
这里用了一个ctype的函数,ispunct(char),当字符是非空格或数字或字母时,返回0,但题目不包括空格,所以要加上。
另外,i和j的比较要在每一个循环中,否则不满足条件也会继续执行。
用时16ms。
标签:
原文地址:http://www.cnblogs.com/ketchups-notes/p/4458997.html