2023每日刷题(三十五)
Leetcode—5.最长回文子串
中心扩展法算法思想
可以使用一种叫作“中心扩展法”的算法。由回文的性质可以知道,回文一定有一个中心点,从中心点向左和向右所形成的字符序列是一样的,并且如果字符串的长度为偶数的话,中心点在中间的两个字符的中间位置(不对应具体字符);如果是奇数的话,则中心点会在中间的字符上。
实现代码
class Solution {
public:int findPalindrome(string s, int left, int right, int* start) {int len = s.size();while(left >= 0 && right <= len && s[left] == s[right]) {left--;right++;}left++;right--;*start = left;return right - left + 1;}string longestPalindrome(string s) {int n = s.size();int i = 0;int len1 = 0, len2 = 0;int start1 = 0, start2 = 0;int sta = 0;int maxlen = 0;while(i < n) {len1 = findPalindrome(s, i, i, &start1);len2 = findPalindrome(s, i, i + 1, &start2);if(len1 > maxlen || len2 > maxlen) {if(len1 > len2) {sta = start1;maxlen = len1;} else {sta = start2;maxlen = len2;}}i++;}return s.substr(sta, maxlen);}
};
运行结果
复杂度分析
● 时间复杂度:枚举所有中心点的时间复杂度为O(n),findPalindrome函数的时间复杂度仍然是O(n),因此总的时间复杂度为 O ( n 2 ) O(n^2) O(n2),其中n为字符串的长度
● 空间复杂度:O(1)
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!