1. 程式人生 > 其它 >vue3+vite 動態引入圖片的幾種方式,解決打包後圖片路徑錯誤不顯示的問題

vue3+vite 動態引入圖片的幾種方式,解決打包後圖片路徑錯誤不顯示的問題

5. 最長迴文子串

難度中等

給你一個字串 s,找到 s 中最長的迴文子串。

 

示例 1:

輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。

示例 2:

輸入:s = "cbbd"
輸出:"bb"

 

提示:

  • 1 <= s.length <= 1000
  • s 僅由數字和英文字母組成

 

解法: 雙指標

 

以圖中字串為例

 

 1. 使用雙指標,左指標 l1 指向首 從左向右遍歷,右指標指向尾。外層while(l1 < r1)

 2.如果s[l1] != s[r1],表明 l1 r1 當前不是迴文串。則 l1 位置不變, r1左移。繼續下次迴圈對比  s[l1]  s[r1]是否相等

    如果s[l1] == s[r1],表明,l1 rl可能是個迴文字串, 進入子while迴圈,(l2 r2 是待檢查的迴文串的左右指標),進行迴文串檢查,

 3. 如果是迴文串,記錄串長,記錄l1位置,取最大的串長

 4.存在一個情況就是 “aa”是迴文,“aca”也是迴文,即s[l2] == s[r2] 候,左指標右移,右指標左移,則左右指標就完美的錯過了,位置變成了 r2 l2 ,即l2 = r2+1 。

  另一個情況:s[l2] == s[r2] 候,左指標右移,右指標左移 l2 == r2了。

char * longestPalindrome(char * s){     int l1,l2;     int r1,r2;     int len = strlen(s);     int cnt = 0;     int maxcnt = 0;     int ll,rr;     l1 = 0;     r1 = len -1;
    while(l1 < len){         if(s[l1] != s[r1]){             r1--;             if(l1 == r1){                 l1++;                 r1 = len-1;             }         }else{             l2 = l1;             r2 = r1;             while(l2<r2){                 if(s[l2]==s[r2]){                     l2++;                     r2--;                 }else{                     //l1++; //剛開始這塊寫錯了,如果子串不是迴文,l1的位置仍然不動,只挪動r1,右指標                     r1--;                     break;                 }             }             if(l2 == r2 || l2 == (r2+1)){ // 針對第4 點的處理                 cnt = r1-l1 +1;                 if(maxcnt < cnt){                     maxcnt = cnt;                     ll = l1;                     rr = r1;                 }                 l1++; //如果是迴文串,左指標右移,右指標指向尾,繼續檢查剩餘字串是否有迴文串                 r1 = len-1;             }
        }     }     s[ll+maxcnt] = '\0'; //截取回文串     s = s+ll;     return s;
}