LeetCode 647. 迴文子串 暴力模擬
阿新 • • 發佈:2020-08-19
地址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; } };