日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...

發布時間:2024/7/23 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  • 最近準備把算法慢慢的撿起來,所以準備日更一道算法題目,難度自然是由簡入難,所以同學們可以每天都來看看小編的更新。
  • 日更時間定在每晚20:00,希望大家多多關注啦。
  • 昨天就欠更了,簡直就是打臉。過完年剛開工,比較忙,今天更新兩道,晚上還會更新一道!!!!!
  • 尋找最長回文子串

    給定一個字符串s,尋找最長的回文子串。您可以假設s的最大長度為1000。

    例1:

    輸入: “babad” 輸出: “bab” 注意: “aba”也是一個有效的答案。

    例2:

    輸入: “cbbd” 輸出: “bb”

    解題思路

  • 我們先說一下什么是回文串:簡單的來說,回文串就是某一個字符串左右對稱即為回文串。
  • 那么回文子串也就是在某一字符串中,包含的回文串。
  • 我們如何判斷或者是尋找回文串呢?我們了解到他具有左右對稱的性質,當我們要確認某一個字符串是否為回文串時,我們可以從字符串的中心開始,向左右兩邊進行對比。貼一段代碼:
  • // 驗證是否為回文串private boolean check(String s, int j, int k) { // s:字符串 j:中心下標 k:中心下標。 // 當字符串長度為奇數時,j=k // 當字符串長度為偶數是,j=k-1 while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) { j--; k++; } // 判斷是否兩邊循環到了開始和結尾。 if(j==0&&k==s.length()-1){ return true; } return false;}
  • 那么尋找的方法也與上方代碼大同小異。一起來看一下完整代碼:
  • public class Test { private int start=0; // 定義回文串開始下標 private int maxLen=0; // 定義回文串最大長度 @Test public void test(){ // 輸出答案 System.out.println(longestPalindrome("babad")); } public String longestPalindrome(String s) { // 定義字符長度 int len = s.length(); // 判斷長度如果小于2,即等于0或1,則直接返回當前字符串 if (len < 2) return s; // 定義循環,即將i作為回文串的中心進行查找或驗證。 for (int i = 0; i < len - 1; i++) { // 假設答案回文串長度為奇數 findPalindrome(s, i, i); // 假設答案回文串長度為偶數 findPalindrome(s, i, i + 1); } // 從字符串中截取答案回文串 return s.substring(start, start + maxLen); } // 查找回文串 private void findPalindrome(String s, int j, int k) { // 以對稱中心向左右比對字符以尋找回文串 while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) { j--; k++; } //(k - j - 1)是本次查詢獲得的回文串長度 if (maxLen < k - j - 1) { // 修改回文串開始下標 start = j + 1; // 修改最大長度 maxLen = k - j - 1; } }}

    最后說兩句

  • 所有的題目都有很多種解法,我的一定不是最好的,甚至可以說是比較低端的解法,希望大牛們多多指教!!!
  • 如果朋友們對算法、編程有很大興趣的話,可以私信我,大家一同探討;相互學習、共同進步。
  • 朋友們如果對這道題目有更好的解法,希望可以在評論中指出,讓大家一起討論學習。
  • 最后感謝大家的閱讀以及關注,謝謝大家!!!
  • 總結

    以上是生活随笔為你收集整理的怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。