迴文子串的個數

1、題目描述

  1.1、題目

        本題要求統計一個字符串中包含多少個迴文子串。首先我們來確定子串的概念:一個字符串的子串,就是指它本身的各個部分。如字符串“aba”的子串有“a”、“b”、“a”、“ab”、“ba”和“aba”。

       再來看回文,迴文就是從左讀到右和從右讀到左都是一樣的,長度爲1的字符串也是迴文。如“a”、“s”、"aa"、“aba”和“aabaa”等都是迴文。

      本題在一個字符串中,單個字符也被認爲是迴文子串,相同的重複的子串也需要計算在內。本題要求判斷一個字符串中的所有的子串是否是迴文子串。如果用常規方法做,肯定會出現超時錯誤。這裏採用由中心向外擴散的方法去判斷一個子串是否是迴文子串,如果最中心的子串不是迴文,那麼,立即終止,不必去判斷向外圍擴散的子串了,這就大大節約了時間。

      下面以“abaa”爲例,講解由中心向外擴散的方法,如下圖所示。

(1)從左往右,釘住最後一個字符。

“abaa”串:先考查中心子串“ba”不是迴文串,就可以判定“abaa”不是迴文子串;

“baa”串:先考查中心子串“baa”不是迴文,它是最外子串,不必向外擴散;

“aa”串:考查中心子串中“aa”是迴文,它是最外子串,不必向外擴散。

(2)從右邊倒數第二個字符往左,釘住第一個字符。

"aba"串:考查中心子串“aba”,是迴文,它是最外子串,不必向外擴展;

“ab”串:考查子串“ab”,不是迴文,它是最外子串,不必向外擴展;

這樣下來,加上單個子串“a”,“b”,“a”,“a”4個,“abaa”中共包含6個迴文子串。

  1.2、輸入描述

輸入數據中有多個測試案例。每個案例是一個非空且長度不超過5000的字符串。

處理到文件結尾。

   1.3、輸出描述

在每行上打印該字符串中迴文子串的個數。

  1.4、輸入樣例

aba

aa

  1.5、輸出樣例

4

3

2、C++實現

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