试写一个算法评定字符串是否是回文
时间: 2024-10-29 12:15:10 浏览: 31
确定一个字符串是否是回文,即正读反读都一样的词或短语,可以使用简单的双指针策略。这里是一个基本的Python算法:
```python
def is_palindrome(s):
# 将输入字符串转换为小写并移除非字母数字字符
s = ''.join(c for c in s.lower() if c.isalnum())
# 初始化两个指针,一个从开始,另一个从结束
left, right = 0, len(s) - 1
# 当左指针小于右指针时,继续比较
while left < right:
# 如果左右指针对应的字符不同,则不是回文
if s[left] != s[right]:
return False
# 否则,移动指针向中间靠拢
left += 1
right -= 1
# 如果所有字符都匹配,则字符串是回文
return True
```
这个算法首先清理字符串,然后通过逐个比较首尾字符直到相遇来判断。如果任何时候发现不相等的字符,就立即返回False,否则在检查完所有对应对称的字符后返回True。
相关问题
试写一个c语言算法评定字符串是否是回文
在 C 语言中,我们可以编写一个简单的函数来判断一个字符串是否是回文。回文是指正读反读都一样的字符串,比如 "level"、"madam" 等。下面是一个简单的示例,使用两个指针分别从字符串的两端开始向中间移动,比较字符是否相等:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
int isPalindrome(char str[], int start, int end);
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin); // 防止换行符
str[strcspn(str, "\n")] = '\0'; // 去除fgets获取的换行符
if (isPalindrome(str, 0, strlen(str) - 1)) {
printf("%s 是回文\n", str);
} else {
printf("%s 不是回文\n", str);
}
return 0;
}
// 判断字符串是否为回文
int isPalindrome(char str[], int start, int end) {
while (start < end) { // 当起始位置小于结束位置
if (str[start] != str[end]) { // 如果首尾字符不相等
return 0; // 不是回文,返回0
}
start++; // 向内移动起始指针
end--; // 向外移动结束指针
}
return 1; // 全部字符都匹配,返回1表示是回文
}
阅读全文