天天看點

小韋老師@神犇營-my0214-回文串小韋老師@神犇營-my0214-回文串

小韋老師@神犇營-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;
}

           

繼續閱讀