Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.javascript
Example 1:java
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
複製代碼
第一想法是循環遍歷字符串,判斷子字符串是不是迴文子串,複雜度O(n^3).後來發現這是暴力解法QAQ.正則表達式
/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { let maxLen = 0; let begin = 0; let end = 0; for(let i=0;i<s.length;i++){ for(let j = i; j < s.length;j++){ if(isPalindromicStr(s, i,j)){ let len = (j - i)+1; if(len > maxLen){ begin = i; end = j; maxLen = len; } } } } return s.substr(begin, maxLen); }; // 判斷是不是重複子串 function isPalindromicStr(str, begin, end){ let i = begin || 0; let j = end || str.length - 1; if(j < 0){ return false; } while(i <=j ){ let charA = str.charAt(i); let charB = str.charAt(j); if(charA != charB){ return false; } i++; j--; } return true; } 複製代碼
看了網上的解法,優化版O(n^2)算法
var longestPalindrome = function(s) { let res = ""; let cur = ""; for(let i = 0; i < s.length; i ++){ for(let j = i; j < i + 2; j ++){ let left = i; let right = j; while(s[left] && s[left] === s[right]){ cur = s.substring(left, right + 1); if(cur.length > res.length) res = cur; left --; right ++; } } } return res; }; 複製代碼
動態規劃算法待補充QAQ編程
本週看耗子叔的編程範式,跳出了業務,跳出了手頭的編程語言,分析編程的本質實現,發現大道至簡,語言都是互通的,最終都是那些編程範式的特徵組合。都是計算機大佬的特徵封裝。markdown
若是將代碼的邏輯和控制有效的分開,那麼代碼就會變得更易於改進和維護。編程語言
有效的分離Logic、Control、Data是寫出好程序的關鍵所在函數式編程
代碼複雜度的緣由函數
Redux的實現優化