LeetCode-----第125题-----验证回文串

验证回文串

难度:简单

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

题目分析:

       思路很简单,就是先遍历一遍整个字符串,将大写字母变成小写,将不是字母的字符排除。然后检查是否是回文串即可。

参考代码:

class Solution {
public:
	bool isPalindrome(string s) {
		if (s.empty())
			return true;

		int count = 0;
		for (int i = 0; i < s.size(); i++)
		{
			while (i < s.size() && !(s[i] >= 'a' && s[i] <= 'z'))
			{
				if (s[i] >= 'A' && s[i] <= 'Z')
				{
					s[count] = s[i] - 'A' + 'a';
					count++;
					i++;
				}
				else if (s[i] >= '0' && s[i] <= '9')
				{
					s[count] = s[i];
					count++;
					i++;
				}
				else{
					i++;
				}
			}
			if (i < s.size())
			{
				s[count] = s[i];
				count++;
			}
		}
        //回文字符串要分奇偶的,类似于“aba”,“baab”。并且要注意除2向下取
		if (count % 2 == 0)
		{
			return check(s, count, count / 2 - 1, count / 2);
		}
		else{
			return check(s, count, count / 2, count / 2);
		}
	}

	bool check(string& s, int end, int p1, int p2)
	{
		while (p1 >= 0 && p2 < end)
		{
			if (s[p1--] != s[p2++])
			{
				return false;
			}
		}
		return true;
	}
};

猜你喜欢

转载自blog.csdn.net/L_smartworld/article/details/107541942
今日推荐