“迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。花花非常喜歡這種擁有對稱美的迴文串,生日的時候她得到兩個禮物分別是字符串A和字符串B。

1.題目描述

“迴文串”是一個正讀和反讀都一樣的字符串,比如“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

2.代碼展示

#include<iostream> 
#include<string> 
using namespace std;
bool palindrome(const string &s) 
{ 
    int begin=0,end=s.size()-1;
    while (begin<end) 
    {
    if (s[begin] == s[end]) 
        ++begin,--end;
   else
        return false; 
    }
    return true; 
}
int main() 
{
    string s1,s2;
    cin>>s1>>s2; 
    string s(s1); 
    int count = 0; 
    for (int i=0; i<=s1.size(); ++i) {
        s.insert(i,s2); 
        if (palindrome(s))
        {
            ++count; 
        }
        s = s1; 
    }
    cout<<count<<endl; 
    return 0; 
}

3.解題思路

先寫一個判斷迴文串的函數,然後將s2插入s1臨時拷貝中,如果可以count++,不可以就復原s1繼續判斷,直到輸出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章