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++) {
} return str; }; const palindrome = (s, i, j) => { while(i >= 0 && j < s.length && s[i] === s[j]) {const str1 = palindrome(s, i, i);
const str2 = palindrome(s, i, i+1);
str = str1.length > str.length ? str1 : str;
str = str2.length > str.length ? str2 : str;
} return s.slice(i+1, j); } ``` | | —- |i--;
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); }
执行用时:**80 ms**, 在所有 JavaScript 提交中击败了**93.35%**的用户<br />内存消耗:**44.1 MB**, 在所有 JavaScript 提交中击败了**58.31%**的用户<br />通过测试用例:**180 / 180** |
| --- |
<a name="FDgPz"></a>
## 20220405,14min
| 20220405```javascript
/**
* @param {string} s
* @return {string}
*/
// 09:10 -> 09:24
var longestPalindrome = function(s) {
// let maxStr; // bug:初始值为undefind,计算长度时maxStr.length会报错
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]) { // bug:应该是===比较,=就变成了赋值
// while (l >= 0, r <= s.length, s[l] === s[r]) { // bug: 判断条件出错
while (l >= 0 && r <= s.length && s[l] === s[r]) {
l--;
r++;
}
return s.substr(l + 1, r - l -1);
}
执行用时: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++) {
// maxStr = oddStr.length > maxStr ? oddStr : maxStr // bug:把maxStr当做长度来使用了const oddStr = palindrome(s, i-1, i+1); // 奇数(x) 应该是长度为偶数的回文子串
// const evenStr = palindrome(s, i, i); // 偶数 // bug:palindrome(s, i-1, i+1); 和palindrome(s, i, i);都是长度为奇数的回文子串
const evenStr = palindrome(s, i, i+1); // 长度为奇数的回文子串
} return maxStr };maxStr = oddStr.length > maxStr.length ? oddStr : maxStr
// maxStr = evenStr.length > maxStr ? evenStr : maxStr // bug:同上
maxStr = evenStr.length > maxStr.length ? evenStr : 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 |
| —- |