小韋老師@神犇營-my0214-回文串
題目:
描述
回文串是正着讀和反着讀都一樣的字元串。比如“abcdcba”和“abccba”就是回文串,而“abcdba”就不是回文串。現在輸入一個字元串,判斷這個字元串是否為回文串,若是,則輸出 yes,否則輸出 no。
輸入
輸入一個不含空格的字元串,長度不超過 100。
輸出
根據判斷的結果輸出 yes 或者 no。
輸入樣例1
abcdcba
輸出樣例1
yes
題解:
思路:
整體思路:
對應位置的字元都相同,是為回文串。
怎麼判斷呢?如果發現有某兩個對應位置的字元不相同,則說明我們找到了反
例,則不是回文串。當所有位置都判斷完,沒有找到反例時,說明是回文串。
具體步驟:
1.定義一個 char 數組 s,用來存儲輸入的字元串,并輸入 s。
2.求得字元串 s 的長度,賦給 len。
3.(用自定義函數)判斷字元串 s 是否為回文串,若是,則輸出 yes,否則輸
出 no。
if (pal(len)) cout << "yes";
else cout << "no";
4.實作自定義函數:
bool pal(int n) { // 參數 n 為字元串長度
for (int i = 0; i < n/2; i++) { // 枚舉前一半的位置
if (s[i] != s[n - 1 - i]) { // 若發現某個對應位置的字元不等時
// 說明找到一個反例,證明字元串不是回文串,傳回 false
return false;
}
}
// 當看過所有對應位置都找完,沒有不等的情況(若有不等情況已經傳回 false,
// 代碼不會執行到此處),說明就是回文串,傳回 true
return true;
}
完整代碼
#include <bits/stdc++.h>
using namespace std;
char s[110];
bool pal(int n) { // 參數 n 為字元串長度
for (int i = 0; i < n/2; i++) { // 枚舉前一半的位置
if (s[i] != s[n - 1 - i]) { // 若發現某個對應位置的字元不等時
// 說明找到一個反例,證明字元串不是回文串,傳回 false
return false;
}
}
/* 當看過所有對應位置都找完,沒有不等的情況(若有不等情況已經傳回 false,
代碼不會執行到此處),說明就是回文串,傳回 true */
return true;
}
int main() {
scanf("%s", s);
int len = strlen(s);
if (pal(len)) cout << "yes";
else cout << "no";
return 0;
}