1. 程式人生 > 實用技巧 >LeetCode 647. 迴文子串 暴力模擬

LeetCode 647. 迴文子串 暴力模擬

地址https://leetcode-cn.com/problems/palindromic-substrings/

給定一個字串,你的任務是計算這個字串中有多少個迴文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。



示例 1:

輸入:"abc"
輸出:3
解釋:三個迴文子串: "a", "b", "c"
示例 2:

輸入:"aaa"
輸出:6
解釋:6個迴文子串: "a", "a", "a", "aa", "aa", "aaa"


提示:

輸入的字串長度不會超過 1000

演算法1
(暴力列舉) O(n)O(n)
1 以每個字母為中心 每次左右向外擴充套件+1 檢視字母是否相等。

如果相等則是迴文 如果不是則不必繼續檢測,因為已經出現不對稱,不可能出現迴文了
2 以i i+1字母為中心 每次左右向外擴充套件+1 檢視字母是否相等。
如果相等則是迴文 如果不是則不必繼續檢測,因為已經出現不對稱,不可能出現迴文了

C++ 程式碼

class Solution {
public:

    bool Check(const string& s, int l, int r)
{
    if (s[l] == s[r]) return true;


    return false;
}

int countSubstrings(string s) {
    int ans = 0
; for (int i = 0; i < s.size(); i++) { int l = i; int r = i; while (l >= 0 && r < s.size()) { if (Check(s, l, r)) ans++; else break; l--; r++; } } for (int i = 0; i < s.size(); i++) { int l = i; int r = i+1
; while (l >= 0 && r < s.size()) { if (Check(s, l, r)) ans++; else break; l--; r++; } } return ans; } };