11/**
2+ * 动态规划
3+ * @param {string } s
4+ * @return {string }
5+ */
6+ // let longestPalindrome = function (s) {
7+ // let n = s.length
8+ // if (n < 2) {
9+ // return s
10+ // }
11+
12+ // let dp = []
13+ // for (let i = 0; i < n; i++) {
14+ // dp[i] = []
15+ // dp[i][i] = true
16+ // }
17+
18+ // let max = 0
19+ // let begin = 0
20+ // for (let j = 1; j < n; j++) {
21+ // for (let i = 0; i < j; i++) {
22+ // if (s[j] !== s[i]) {
23+ // dp[i][j] = false
24+ // } else {
25+ // let indent = dp[i + 1][j - 1]
26+ // if (indent === undefined || indent === true) {
27+ // dp[i][j] = true
28+ // }else {
29+ // dp[i][j] = false
30+ // }
31+ // }
32+
33+ // if (dp[i][j] === true && j - i > max) {
34+ // max = j - i
35+ // begin = i
36+ // }
37+ // }
38+ // }
39+ // console.log('dp', dp)
40+ // return s.substr(begin, max + 1)
41+ // }
42+
43+ /**
44+ * 中心扩散法
245 * @param {string } s
346 * @return {string }
447 */
@@ -8,35 +51,27 @@ let longestPalindrome = function (s) {
851 return s
952 }
1053
11- let dp = [ ]
12- for ( let i = 0 ; i < n ; i ++ ) {
13- dp [ i ] = [ ]
14- dp [ i ] [ i ] = true
15- }
16-
17- let max = 0
1854 let begin = 0
19- for ( let j = 1 ; j < n ; j ++ ) {
20- for ( let i = 0 ; i < j ; i ++ ) {
21- if ( s [ j ] !== s [ i ] ) {
22- dp [ i ] [ j ] = false
23- } else {
24- let indent = dp [ i + 1 ] [ j - 1 ]
25- if ( indent === undefined || indent === true ) {
26- dp [ i ] [ j ] = true
27- } else {
28- dp [ i ] [ j ] = false
29- }
30- }
55+ let max = 1
3156
32- if ( dp [ i ] [ j ] === true && j - i > max ) {
33- max = j - i
34- begin = i
57+ let spread = ( start , end ) => {
58+ while ( s [ start ] === s [ end ] && start >= 0 && end < n ) {
59+ let len = end - start + 1
60+ if ( len > max ) {
61+ max = len
62+ begin = start
3563 }
64+ start --
65+ end ++
3666 }
3767 }
38- console . log ( 'dp' , dp )
39- return s . substr ( begin , max + 1 )
68+
69+ for ( let mid = 0 ; mid < n ; mid ++ ) {
70+ spread ( mid , mid )
71+ spread ( mid , mid + 1 )
72+ }
73+
74+ return s . substr ( begin , max )
4075}
4176
42- console . log ( longestPalindrome ( "abcda " ) )
77+ console . log ( longestPalindrome ( "babad " ) )
0 commit comments