344. 反转字符串
思路
双指针从两端开始替换
代码
/*** @param {character[]} s* @return {void} Do not return anything, modify s in-place instead.*/var reverseString = function(s) {let len = s.length;let l = 0, r = len - 1;while(l < r) {let tmp = s[l]s[l] = s[r]s[r] = tmpl++r--}};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%281%29)
541. 反转字符串 II
思路
每k个为1组,奇数组需要反转,偶数不需要
代码
var reverseStr = function(s, k) {
let arr = s.split(‘’), len = arr.length, flag = true;
for(let i = 0; i < len; i += k) {
if (flag) {
reverseString(arr, i, i + k-1)
}
flag = !flag;
}
return arr.join(‘’)
};
function reverseString(s, l, r) {
while(l < r) {
let tmp = s[l]
s[l] = s[r]
s[r] = tmp
l++
r—
}
};
复杂度分析
557. 反转字符串中的单词 III
思路
将字符串用空格分割,然后每个单元反转后用空格拼接
代码
/*** @param {string} s* @return {string}*/// 也可以用 split 直接分割var reverseWords = function(s) {let res = '', tmp = '', len = s.length;for(let i = 0; i < len; i ++) {if (s[i] === ' ') {res = reverseStr(res, tmp) + ' 'tmp = ''} else {tmp += s[i]}}res = reverseStr(res, tmp)return res};function reverseStr(res, word) {let i = word.length - 1;for(; i >= 0; i --) {res += word[i]}return res;}
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%281%29)
151. 翻转字符串里的单词
思路
利用栈的特性,将每个单词入栈,然后再依次出栈
代码
/*** @param {string} s* @return {string}*/var reverseWords = function(s) {let arr = [], len = s.length, word = '';for(let i = 0; i < len; i ++) {if (s[i] != ' ') {word += s[i];if (s[i+1] == ' ' || i == len - 1) {arr.push(word)word = ''}}}let res = ''while(arr.length) {if (arr.length === 1) {res += arr.pop()} else {res += arr.pop() + ' '}}return res;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%28N%29)
