嘔心瀝血演算法題——最大子串
阿新 • • 發佈:2018-12-26
// 串“abcba”以字母“c”為中心左右對稱;串“abba”是另一種模式的左右對稱。 // 這兩種情況我們都稱這個串是映象串。特別地,只含有1個字母的串,可以看成是第一種模式的映象串。 // 一個串可以含有許多映象子串。我們的目標是求一個串的最大映象子串(最長的映象子串), // 如果有多個最大映象子串,對稱中心靠左的優先選中。例如:“abcdeefghhgfeiieje444k444lmn”的最大映象子串是:“efghhgfe” function f(s) { // 所求的最大對稱子串 let max_s = ""; for (let i = 0; i < s.length; i++) { // 第一種對稱模式 let step = 1; try { for (; ;) { if (s.charAt(i - step) != s.charAt(i + step)) break; step++; } } catch (e) { } let s1 = s.substring(i - step + 1, i + step); // 第二種對稱模式 step = 0; try { for (; ;) { if (s.charAt(i - step) != s.charAt(i + step + 1)) break; step++; } } catch (e) { } let s2 = s.substring(i - step + 1, i + step + 1); if (s1.length > max_s.length) max_s = s1; if (s2.length > max_s.length) max_s = s2; } console.log(max_s); } f('abcdeefghhgfeiieje444k444lmn');