之前问大家讲解过 回文数,就是一个数无论从前读 还是从后读 结果都一样
今天我为大家讲解的回文字符串 和回文数类似 但是里面有要筛选剔除的字符
这就考验大家如何 筛选剔除
难度简单602收藏分享切换为英文接收动态反馈
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
示例 1:
输入: s = "A man, a plan, a canal: Panama" 输出:true 解释:"amanaplanacanalpanama" 是回文串。
示例 2:
输入:s = "race a car" 输出:false 解释:"raceacar" 不是回文串。
示例 3:
输入:s = " " 输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。 由于空字符串正着反着读都一样,所以是回文串。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int isPalindrome(char* s) {
int len = strlen(s);
char* p = (char*)malloc(sizeof(char) * (len + 1));
int a = 0;
for (int i = 0; i < len; i++)
{
if (s[i] >= 'A' && s[i] <= 'Z')
{
p[a++] = s[i] + 32;
}
else if ((s[i] >= 'a' && s[i] <= 'z') || ('0' <= s[i] && s[i] <= '9'))
{
p[a++] = s[i];
}
}
for (int i = 0; i < a / 2; i++)
{
if (p[i] != p[a - i - 1])
{
return -1;
}
}
return 1;
}
int main()
{
char arr[] = "A man, a plan, a canal: Panama";
int a = isPalindrome(arr);
if (a > 0)
{
printf("true");
}
else
{
printf("false");
}
return 0;
}
本题来自leetcode125 感兴趣的铁汁可以去尝试~