问题:
实现一个函数,判断一个字符串是否为回文字符串。
回文字符串是指正读和反读都相同的字符串。例如,"level"、"radar"和"madam"都是回文字符串。
要解决这个问题,我们可以使用两个指针分别指向字符串的首尾字符,然后逐步向中间移动,同时比较指针所指向的字符是否相等。如果在比较过程中发现不相等的字符,那么该字符串就不是回文字符串。
下面是一个示例代码,演示如何通过C语言实现判断回文字符串的函数:
代码语言:javascript复制#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindrome(const char *str) {
int left = 0; // 左指针
int right = strlen(str) - 1; // 右指针
while (left < right) {
if (str[left] != str[right]) {
return false; // 如果字符不相等,则不是回文字符串
}
left ; // 左指针向右移动
right--; // 右指针向左移动
}
return true; // 如果所有字符都相等,则是回文字符串
}
int main() {
const char *str1 = "level";
const char *str2 = "hello";
if (isPalindrome(str1)) {
printf("%s is a palindrome.n", str1);
} else {
printf("%s is not a palindrome.n", str1);
}
if (isPalindrome(str2)) {
printf("%s is a palindrome.n", str2);
} else {
printf("%s is not a palindrome.n", str2);
}
return 0;
}
在上述代码中,isPalindrome
函数接受一个指向常量字符的指针str
作为参数,并返回一个布尔值。函数内部,我们使用left
和right
两个指针分别指向字符串的首尾字符。然后,通过一个循环,我们逐步将左指针向右移动,右指针向左移动,并比较指针所指向的字符是否相等。如果在比较过程中发现不相等的字符,那么该字符串就不是回文字符串,我们返回false
。如果循环结束后没有发现不相等的字符,那么该字符串就是回文字符串,我们返回true
。
在main
函数中,我们定义了两个字符串str1
和str2
,并分别调用isPalindrome
函数来判断它们是否为回文字符串。根据返回的结果,我们打印相应的提示信息。
这个算法的时间复杂度是O(n),其中n是字符串的长度。因为我们需要遍历字符串的一半来进行比较,所以算法的效率是非常高的。