题目
https://leetcode.cn/leetbook/read/array-and-string/conm7/
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
实现
Hint
思路:遍历每个字符作为回文中心,向左右扩展寻找最长回文。 注意:奇偶情况 复杂度分析:
- 时间复杂度:
- 空间复杂度:
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if (s.length < 2) return s;
let start = 0, maxLength = 1;
// 中心扩展函数
const expandAroundCenter = (left, right) => {
while (left >= 0 && right < s.length && s[left] === s[right]) {
const currentLength = right - left + 1;
if (currentLength > maxLength) {
maxLength = currentLength;
start = left;
}
left--;
right++;
}
};
for (let i = 0; i < s.length; i++) {
expandAroundCenter(i, i); // 奇数长度回文(中心为单个字符)
expandAroundCenter(i, i + 1); // 偶数长度回文(中心为两个字符)
}
return s.slice(start, start + maxLength);
};
// 辅助函数:判断是否为回文(修正版)
var isPalindrome = function(s) {
return s === s.split('').reverse().join('');
};