描述
Given a string, your task is to count how many palindromic substrings in this string.
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.
The input string length won't exceed 1000
您在真实的面试中是否遇到过这个题?
是
样例
Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".
这道题直接计算有多少个字符串并不困难,但是时间复杂度过高,
有一个算法叫做马拉车算法可以使用O(n)的时间查找出字符串的最长回文子串。
class Solution {
public:
/**
* @param str: s string
* @return: return an integer, denote the number of the palindromic substrings
*/
int countPalindromicSubstrings(string &str) {
// write your code here
if (str.empty()) return 0;
int n = str.size(), res = 0;
for (int i = 0; i < n; ++i) {
helper(str, i, i, res);
helper(str, i, i + 1, res);
}
return res;
}
void helper(string str, int i, int j, int& res) {
while (i >= 0 && j < str.size() && str[i] == str[j]) {
--i; ++j; ++res;
}
}
};