LeetCode刷题——验证回文串

大家好,今天刷到一道很简单的题,题目要求如下:


思路是这样的:首先做一个循环,当判断是小写字幕或数字时,直接读入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;

后续有更好的办法再来补充。

这道题就是这样了,我们下期见!

猜你喜欢

转载自blog.csdn.net/Miss_yuki/article/details/80071302