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的实现优化