/** * @param {string}s * @return {string} */ var longestPalindrome = function (s) { const len = s.length; let result = '' // 遍历,每一个中间点 for (let i = 0; i < len; i++) { let l = i - 1; let r = i + 1; // 往左考虑,第一种情况 while (l >= 0 && s[l] === s[i]) { l--; } // 往右考虑,第一种情况 while (r < len && s[r] === s[i]) { r++; } // 考虑第二种情况 while (l >= 0 && r < len && s[l] === s[r]) { r++; l--; } // 遍历每个中心点,获得此中心点的最长回文,然后获得结果 if (result.length < r - l) { result = s.slice(l + 1, r) } } return result };
/** * @param {number[]}nums * @return {number} */ var firstMissingPositive = function (nums) { const len = nums.length;
let tmpArr = nums.slice(); // 去除负数,统一改为0 let hasOne = false; for (let i = 0; i < len; i++) { const val = tmpArr[i]; if (val === 1) { hasOne = true; } if (val < 1) { tmpArr[i] = null// 清空干扰 } else { tmpArr[i] = val } }
// 如果没有1。则结果是1 if (!hasOne) return1;
// 对应下标的值标记为负值,不破坏原来的数字 for (let i = 0; i < len; i++) { // 这里用绝对值,是因为可能被前面遍历的操作变为负值 let val = Math.abs(tmpArr[i]); if (val <= len && val > 0) { // 把符合条件的值,对应下标的值改为负数 tmpArr[val - 1] = -Math.abs(tmpArr[val - 1]) } }
let result = len + 1; // 最后走一遍,如果是负数,则原来存在于数组、非0则不存在,则是要找的结果。如果都是负数,则结果是len for (let i = 0; i < len; i++) { const val = tmpArr[i]; // 没被标记 if (val > 0 || val === null) { result = i + 1; return result; } } return result; };