問題:
實(shí)現(xiàn)一個(gè)函數(shù),判斷一個(gè)字符串是否為回文字符串。
回文字符串是指正讀和反讀都相同的字符串。例如,"level"、"radar"和"madam"都是回文字符串。
要解決這個(gè)問題,我們可以使用兩個(gè)指針分別指向字符串的首尾字符,然后逐步向中間移動(dòng),同時(shí)比較指針?biāo)赶虻淖址欠裣嗟?。如果在比較過程中發(fā)現(xiàn)不相等的字符,那么該字符串就不是回文字符串。
下面是一個(gè)示例代碼,演示如何通過C語言實(shí)現(xiàn)判斷回文字符串的函數(shù):
#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++; // 左指針向右移動(dòng)
right--; // 右指針向左移動(dòng)
}
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
函數(shù)接受一個(gè)指向常量字符的指針str
作為參數(shù),并返回一個(gè)布爾值。函數(shù)內(nèi)部,我們使用left
和right
兩個(gè)指針分別指向字符串的首尾字符。然后,通過一個(gè)循環(huán),我們逐步將左指針向右移動(dòng),右指針向左移動(dòng),并比較指針?biāo)赶虻淖址欠裣嗟?。如果在比較過程中發(fā)現(xiàn)不相等的字符,那么該字符串就不是回文字符串,我們返回false
。如果循環(huán)結(jié)束后沒有發(fā)現(xiàn)不相等的字符,那么該字符串就是回文字符串,我們返回true
。
在main
函數(shù)中,我們定義了兩個(gè)字符串str1
和str2
,并分別調(diào)用isPalindrome
函數(shù)來判斷它們是否為回文字符串。根據(jù)返回的結(jié)果,我們打印相應(yīng)的提示信息。文章來源:http://www.zghlxwxcb.cn/news/detail-831392.html
這個(gè)算法的時(shí)間復(fù)雜度是O(n),其中n是字符串的長度。因?yàn)槲覀冃枰闅v字符串的一半來進(jìn)行比較,所以算法的效率是非常高的。文章來源地址http://www.zghlxwxcb.cn/news/detail-831392.html
到了這里,關(guān)于C語言——oj刷題——回文字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!