Longest Palindromic Substring

Runtime: 4 ms, faster than 99.79% of C++ online submissions for Longest Palindromic Substring.

我最开始是用这种方法。

class Solution {
public:
    string longestPalindrome(string s) {
if (s.empty()) return "";
    if (s.size() == 1) return s;
    int min_start = 0, max_len = 1;
    for (int i = 0; i < s.size();) {
      if (s.size() - i <= max_len / 2) break;//因为 是从i位置往两侧搜索,
//如果从起始点开始的长度比maxlen一半小,那么不可能有比maxlen更大的了,跳出;
int j = i, k = i; while (k < s.size()-1 && s[k+1] == s[k]) ++k;//比如“abbbc”,在位置s[1]就可以直接跳过bb这两个相同元素 i = k+1;跳到与s[i]不相同的元素 while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } //比较两侧元素,若相等则继续 int new_len = k - j + 1;//计算max_len if (new_len > max_len) { min_start = j; max_len = new_len; } } return s.substr(min_start, max_len); } };

 

posted @ 2019-01-09 00:57  keep!  阅读(418)  评论(0编辑  收藏  举报
Live2D