344. 反转字符串

思路

双指针从两端开始替换

代码

  1. /**
  2. * @param {character[]} s
  3. * @return {void} Do not return anything, modify s in-place instead.
  4. */
  5. var reverseString = function(s) {
  6. let len = s.length;
  7. let l = 0, r = len - 1;
  8. while(l < r) {
  9. let tmp = s[l]
  10. s[l] = s[r]
  11. s[r] = tmp
  12. l++
  13. r--
  14. }
  15. };

复杂度分析

时间复杂度 字符串的反转 - 图1#card=math&code=O%28N%29)
空间复杂度 字符串的反转 - 图2#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—
}
};

复杂度分析

空间复杂度 $O(N)$
时间复杂度 $O(N)$


557. 反转字符串中的单词 III

思路

将字符串用空格分割,然后每个单元反转后用空格拼接

代码

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. // 也可以用 split 直接分割
  6. var reverseWords = function(s) {
  7. let res = '', tmp = '', len = s.length;
  8. for(let i = 0; i < len; i ++) {
  9. if (s[i] === ' ') {
  10. res = reverseStr(res, tmp) + ' '
  11. tmp = ''
  12. } else {
  13. tmp += s[i]
  14. }
  15. }
  16. res = reverseStr(res, tmp)
  17. return res
  18. };
  19. function reverseStr(res, word) {
  20. let i = word.length - 1;
  21. for(; i >= 0; i --) {
  22. res += word[i]
  23. }
  24. return res;
  25. }

复杂度分析

时间复杂度 字符串的反转 - 图3#card=math&code=O%28N%29)
空间复杂度 字符串的反转 - 图4#card=math&code=O%281%29)

151. 翻转字符串里的单词

思路

利用栈的特性,将每个单词入栈,然后再依次出栈

代码

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. var reverseWords = function(s) {
  6. let arr = [], len = s.length, word = '';
  7. for(let i = 0; i < len; i ++) {
  8. if (s[i] != ' ') {
  9. word += s[i];
  10. if (s[i+1] == ' ' || i == len - 1) {
  11. arr.push(word)
  12. word = ''
  13. }
  14. }
  15. }
  16. let res = ''
  17. while(arr.length) {
  18. if (arr.length === 1) {
  19. res += arr.pop()
  20. } else {
  21. res += arr.pop() + ' '
  22. }
  23. }
  24. return res;
  25. };

复杂度分析

时间复杂度 字符串的反转 - 图5#card=math&code=O%28N%29)
空间复杂度 字符串的反转 - 图6#card=math&code=O%28N%29)