大家好,今天刷到一道很简单的题,题目要求如下:
思路是这样的:首先做一个循环,当判断是小写字幕或数字时,直接读入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;
后续有更好的办法再来补充。
这道题就是这样了,我们下期见!