2022510, 相隔1个月

|
```javascript /**

  • @param {string} s
  • @return {string} */ // 08:38 -> 08:46 var longestPalindrome = function(s) { let str = ‘’; for(let i = 0; i < s.length; i++) {
    1. const str1 = palindrome(s, i, i);
    2. const str2 = palindrome(s, i, i+1);
    3. str = str1.length > str.length ? str1 : str;
    4. str = str2.length > str.length ? str2 : str;
    } return str; }; const palindrome = (s, i, j) => { while(i >= 0 && j < s.length && s[i] === s[j]) {
    1. i--;
    2. j++;
    } return s.slice(i+1, j); } ``` | | —- |

20220406,8min

| 20220406```javascript /**

  • @param {string} s
  • @return {string} */ // 08:54 -> 09:02 var longestPalindrome = function(s) { let maxStr = ‘’; for (let i = 0; i < s.length; i++) { const s1 = palindrome(s, i, i); const s2 = palindrome(s, i, i+1); maxStr = maxStr.length > s1.length ? maxStr : s1; maxStr = maxStr.length > s2.length ? maxStr : s2; } return maxStr };

function palindrome(s, l, r) { while (l >= 0 && r < s.length && s[l] === s[r]) { l—; r++; } // s.substr(l+1, r-l + 1); // bug:没有return出去 // r-1-(l+1)+1 = r -1 - l -1 + 1 = r - l -1 // return s.substr(l+1, r-l + 1); // bug:长度错了 return s.substr(l+1, r-l - 1); }

  1. 执行用时:**80 ms**, 在所有 JavaScript 提交中击败了**93.35%**的用户<br />内存消耗:**44.1 MB**, 在所有 JavaScript 提交中击败了**58.31%**的用户<br />通过测试用例:**180 / 180** |
  2. | --- |
  3. <a name="FDgPz"></a>
  4. ## 20220405,14min
  5. | 20220405```javascript
  6. /**
  7. * @param {string} s
  8. * @return {string}
  9. */
  10. // 09:10 -> 09:24
  11. var longestPalindrome = function(s) {
  12. // let maxStr; // bug:初始值为undefind,计算长度时maxStr.length会报错
  13. let maxStr = '';
  14. for (let i = 0; i < s.length; i++) {
  15. const s1 = palindrome(s, i, i); // 奇数长度
  16. const s2 = palindrome(s, i, i+1); // 偶数长度
  17. maxStr = maxStr.length > s1.length ? maxStr : s1;
  18. maxStr = maxStr.length > s2.length ? maxStr : s2;
  19. }
  20. return maxStr;
  21. };
  22. function palindrome(s, l, r) {
  23. // while (l >= 0, r <= s.length, s[l] = s[r]) { // bug:应该是===比较,=就变成了赋值
  24. // while (l >= 0, r <= s.length, s[l] === s[r]) { // bug: 判断条件出错
  25. while (l >= 0 && r <= s.length && s[l] === s[r]) {
  26. l--;
  27. r++;
  28. }
  29. return s.substr(l + 1, r - l -1);
  30. }

执行用时:104 ms, 在所有 JavaScript 提交中击败了59.60%的用户
内存消耗:44.7 MB, 在所有 JavaScript 提交中击败了42.70%的用户
通过测试用例:180 / 180
知识点
- str.length计算时,str不能为undefind,let str = ‘’
- while判断时搜索条件书写 &&,不能是, 只有是同为定义或判断或运算时,才能用,这里是3个条件都满足,才进入循环,用&&(20220405、20220409)
- 比较运算符===,很容易写成赋值运算符=(数学是=,所以容易写成=)
| | —- |

20220402,37min

| 20220402```javascript /**

  • @param {string} s
  • @return {string} */ // 21:29 -> 22:06 // 中心扩展法 // 循环,以s[i]为中心(考虑奇数偶数情况),如果左右指针数据相同,左指针递减,右指针递增 // 比较奇数,偶数中大的值 var longestPalindrome = function(s) { // if (s.length = 1) return s // bug,没有判断,只是赋值 if (s.length === 1) return s; let maxStr = ‘’; for (let i = 0; i < s.length; i++) {
    1. const oddStr = palindrome(s, i-1, i+1); // 奇数(x) 应该是长度为偶数的回文子串
    2. // const evenStr = palindrome(s, i, i); // 偶数 // bug:palindrome(s, i-1, i+1); 和palindrome(s, i, i);都是长度为奇数的回文子串
    3. const evenStr = palindrome(s, i, i+1); // 长度为奇数的回文子串
    // maxStr = oddStr.length > maxStr ? oddStr : maxStr // bug:把maxStr当做长度来使用了
    1. maxStr = oddStr.length > maxStr.length ? oddStr : maxStr
    2. // maxStr = evenStr.length > maxStr ? evenStr : maxStr // bug:同上
    3. maxStr = evenStr.length > maxStr.length ? evenStr : maxStr
    } return maxStr };

var palindrome = function (s, l, r) { while(l > 0 && r < s.length && s[l] === s[r]) { l—; r++; } return s.slice(l+1, r) } ``` 执行用时:84 ms, 在所有 JavaScript 提交中击败了88.51%的用户
内存消耗:44.2 MB, 在所有 JavaScript 提交中击败了52.39%的用户
通过测试用例:180 / 180 | | —- |