• leetcode刷题日记


       这里主要采用的是中心扩展法,即将整个字符串遍历,因为中心可能是单个字母,也可能是类似于abbc这样的两个字母的,所以需要对其进行分情况讨论:

        如果是单个字母的时候,有n个情况,如果是两个字母的时候,有n-1种情况。所以合起来就是2n-1中情况

        接下来对每个中心进行扩展然后检验,最后求出其中最长的回文串。

        由其中心确定左右开始的位置,然后用substr函数直接相减就得出了需要的字符串。

    实现代码如下:

     1 class Solution {
     2 public:
     3     int expandAroundCenter(string s, int left, int right)
     4     {
     5         int L=left, R=right;
     6         while(L>=0&&R<s.length()&&s[L]==s[R])
     7         {
     8             L--;
     9             R++;
    10         }
    11         return R-L-1;
    12     }
    13     
    14     string longestPalindrome(string s) {
    15         if(s.length() < 1)
    16         {
    17             return "";
    18         }
    19         int start =0,end =0;
    20         for(int i = 0; i<s.length();i++)
    21         {
    22             int len1 = expandAroundCenter(s,i,i);
    23             int len2 = expandAroundCenter(s,i,i+1);
    24             int len = max(len1,len2);
    25             if(len > end - start)
    26             {
    27                 start = i - (len-1)/2;
    28                 end   =  i + (len)/2;
    29             }
    30         }return s.substr(start,end - start +1);
    31     }
    32     
    33 };

    最终时间复杂度为O(n^2)

     合并两个有序链表

     

     

        

  • 相关阅读:
    校易app-NABCD
    学习进度条week6
    编程珠玑(第二版)阅读笔记05
    四则运算(结对开发)
    编程珠玑(第二版)阅读笔记04
    学习进度条week5
    编程珠玑(第二版)阅读笔记03
    疫情统计可视化(三)
    编程珠玑(第二版)阅读笔记02
    spring注解
  • 原文地址:https://www.cnblogs.com/xingzhuan/p/11466129.html
Copyright © 2020-2023  润新知