大家好,今天刷到一道很简单的题,题目要求如下:
思路是这样的:首先做一个循环,当判断是小写字幕或数字时,直接读入result字符串,当判断是大写字母时,ASCII码加32转换成小写字母,其余字符,空格丢弃。现在得到全是小写字母和数字的result字符串,首先判断一下奇偶性,根据奇偶性对称地分成左右两个子字符串,将右字符串翻转,判断两个字符串是否相等,相等返回true,不等返回false。
代码如下:
class Solution { public: bool isPalindrome(string s) { if (s == "") return 1; string result; int len = s.size(); for (int i = 0;i < len;i++){ if((s[i]>=48 && s[i]<=57)||(s[i]>=97 && s[i]<=122)) result += s[i]; else{ if(s[i]>=65 && s[i]<=90){ result += s[i] + 32; } } } int len_r = result.size(); if(len_r % 2 == 0){ int left = len_r/2; int right = len_r/2 + 1; string sub_l = result.substr(0,left); string sub_r = result.substr(right-1,len_r); reverse(sub_r.begin(), sub_r.end()); if(sub_r == sub_l) return 1; else return 0; } else{ int left = (len_r-1)/2; int right = (len_r+1)/2; string sub_l = result.substr(0,left); string sub_r = result.substr(right,len_r); reverse(sub_r.begin(), sub_r.end()); if(sub_r == sub_l) return 1; else return 0; } } };
通过本题学到的知识点:
1.字符串翻转有一个很方便的函数,reverse。顺便记录一下还有一个sort(s.begin(),s.end());来对字符串进行升序排列,想要降序,只需要升序后reverse一下就可以了。
2.这道题我在自己的vs上运行的时候是写了个main函数,原本一开始一直使用cin来输入string的,但是这次涉及空格的输入,所以转为用gets,但是直接gets string字符串会报错,我还不太熟练,目前想到的解决方法是这样的:
char c[1000]; gets(c); string s = c;
后续有更好的办法再来补充。
这道题就是这样了,我们下期见!