C/C++_2019_7_5(統計迴文)

我之甘冒世不韙,竭全力以爭取,非特求免兇殘之苦,
實求善良之安頓,求人格之確立,求靈魂之救度耳。
我將茫茫人海中,放我唯一靈魂之伴侶。得之,我幸;不得,我命。——徐志摩

題目描述
統計迴文 | 時間限制:1秒 | 內存限制:32768K
“迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。花花非常喜歡這種擁有 對稱美的迴文串,生日的時候她得到兩個禮物分別是字符串A和字符串B。現在她非常好奇有沒有辦法將字符 串B插入字符串A使產生的字符串是一個迴文串。你接受花花的請求,幫助她尋找有多少種插入辦法可以使新 串是一個迴文串。如果字符串B插入的位置不同就考慮爲不一樣的辦法。
例如:
A = “aba”,B = “b”。這裏有4種把B插入A的辦法:

  • 在A的第一個字母之前: “baba” 不是迴文
  • 在第一個字母‘a’之後: “abba” 是迴文
  • 在字母‘b’之後: “abba” 是迴文
  • 在第二個字母’a’之後 “abab” 不是迴文
    所以滿足條件的答案爲2

輸入描述: 每組輸入數據共兩行。 第一行爲字符串A 第二行爲字符串B 字符串長度均小於100且只包含小寫字母 輸出描述: 輸出一個數字,表示把字符串B插入字符串A之後構成一個迴文串的方法數

示例1: 輸入 aba b 輸出 2

題目解析
迴文串也就是前後對稱的字符串。本題是判斷是否是迴文串的變形題。字符串本身不一定是迴文,把第二個字符串插入進去看是否是迴文。

解題思路
本題使用暴力求解方式計算即可,遍歷str1,將str2 insert進入str1的每個位置,判斷是否是迴文,是就 ++count;需要注意的是這裏不能 str1.insert(i, str2),這樣的話str1改變了,判斷下一個位置就不對了。所 以每次使用str1拷貝構造一個str,然後str.insert(i, str2),再判斷。

#include<iostream> 
#include<string> 
using namespace std;
 
// 判斷是否是迴文 
bool IsCircleText(const string& s) {    
	size_t begin = 0;    
	size_t end = s.size()-1;    
	while(begin < end){        
		if(s[begin] != s[end]){
			return false;
		}                            
		++begin;        
		--end;    
	}       
	return true; }
 
int main() {    
	std::string str1, str2;    
	getline(cin, str1);    
	getline(cin, str2);    
	size_t count = 0;    
	for(size_t i = 0; i <= str1.size(); ++i){
		// 將字符串2插入到字符串1的每個位置,再判斷是否是迴文        
		string str = str1;        
		str.insert(i, str2);        
		if(IsCircleText(str)){
			++count;
		}    
	}        
	cout<<count<<endl;    
	return 0; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章