網易筆試編程-統計迴文

題目描述:
“迴文串”是一個正讀和反讀都一樣的字符串,比如“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之後構成一個迴文串的方法數
輸入例子:
aba
b
輸出例子:
2
算法描述:
1. 判斷迴文數的辦法:C++提供了一個reverse()的STL函數,它能夠將順序容器中元素頭尾顛倒,形成與以前元素順序相反的新的排列形式。比如:容器 str中存儲了a b c d e,容器str調用reverse函數: str.reverse(str.begin(), str, end()),從頭到尾進行交換,形成了心的序列 e d c b a ,依舊存儲在容器str中。
2. 將逆轉的容器與原先的容器進行比較,如果相等,則能判斷該容器中的元素是迴文數。
3. 對於統計迴文數,我的做法是將字符串B插入在字符串A的不同位置,然後判斷是不是迴文數,若是,計數器加一。怎麼將B插入字符串A的不同位置:C++中有一格insert()STL函數,它的第一個參數就是指定插入位置,即:str.insert(0, B),該語句的含義是在字符串str的第零個位置前插入字符串B。所以定義一個for循環來掃描字符串A的所有可插入位置,然後插入B字符串進行判斷是否爲迴文數,進行計數。
程序代碼如下:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

bool isHuiWen(string str);

int main(void)
{   
    string strA, strB;
    cin >> strA >> strB;
    int len = strA.size();
    int cnt = 0;
    for (int i = 0; i < len + 1; ++i)
    {
        string temp = strA;
        temp.insert(i, strB);
        if ( isHuiWen(temp) )
        {
            cnt ++;
        }
    }
    cout << cnt << endl;
    return 0;
}

bool isHuiWen(string str)
{
    string temp = str;
    reverse(str.begin(), str.end());
    if (temp == str) 
        return true;
    else return false;
}

若有錯誤之處,敬請指正。

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