国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

每日一道算法題——最長回文字串

2019-11-09 19:33:45
字體:
供稿:網(wǎng)友

最長回文字串

題目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example:

Input: “babad”

Output: “bab” Note: “aba” is also a valid answer. Example: Input: “cbbd”

Output: “bb”

分析 尋找一個字符串的最長回文字串,題目很容易理解。很容易想到的解決辦法:把每個字母當(dāng)做回文串的中心字母,向兩半延伸判斷是否是回文串,并記錄下最長的字符串。時間復(fù)雜度為O(n^2) 這個比暴力求解要好,暴力求解是把所有字串找出來,然后判斷是否是回文串,時間復(fù)雜度為O(n^3)。

代碼

public String longestPalindrome(String s) { if(s.length()<=1) return s; int start = 0,len = 0 ; //從下標(biāo)為1的字符開始,把當(dāng)前字符當(dāng)做中心字符 向兩邊延伸判斷 for(int i = 1;i<s.length();i++){ //回文串長度為偶數(shù) int low = i-1,high = i ; while(low>=0 && high <s.length() && s.charAt(low) == s.charAt(high) ){ low --; high ++; } if(high - low- 1 > len){ len = high - low - 1; start = low +1; } //回文串長度為奇數(shù) low = i-1;high = i+1 ; while(low>=0 && high <s.length() && s.charAt(low) == s.charAt(high) ){ low --; high ++; } if( high - low - 1 > len){ len =high - low- 1; start = low +1; } } return s.substring(start,start+len); }

其他算法

將問題轉(zhuǎn)化為最長公共子串。 將s逆序存儲為s’,再求s與s’的最長公共子串。 比如: s = “cbab” s’=”babc” 最長公共子串為bab,也就是答案。 算法看這里

動態(tài)規(guī)劃算法 算法看這里

Manacher 算法 算法看這里


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 静安区| 蛟河市| 孟连| 和龙市| 昌邑市| 凤山县| 黎城县| 金塔县| 江城| 金塔县| 清丰县| 临猗县| 临沧市| 万全县| 甘洛县| 鞍山市| 黄冈市| 巴马| 鄂尔多斯市| 建阳市| 泰顺县| 喀喇| 万荣县| 井陉县| 平泉县| 香格里拉县| 阿克苏市| 永年县| 丹棱县| 慈利县| 莱阳市| 和田县| 湛江市| 双鸭山市| 屏东县| 苍梧县| 攀枝花市| 册亨县| 尼玛县| 冷水江市| 荥阳市|