Amanda-Zhang
追梦女一枚

力扣每日一题-反转字符串

2020-10-09 -leetcode -算法
Word count: 430 | Reading time: 1min

题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

​ 这是自己一开始的思路,用最笨的办法解决,但是通过了测试用例,却通不过代码要求,暴风哭泣!(后面我才明白并不是我的思路有问题,是关于数组的长度为奇数还是偶数的问题,长度应该减1才能除以2取到数组的中间数,下面第二个才是对的,后知后觉!!!)

1
2
3
4
5
6
7
var reverseString = function(s) {
for(i=0;i<=s.length/2;i++){
const len = s.length-1
temp = s[len-i];
s[len-i] = s[i];
s[i] = temp;
}
1
2
3
4
5
6
7
8
var reverseString = function(s) {
const len = s.length-1
for(i=0;i<=len/2;i++){
temp = s[len-i];
s[len-i] = s[i];
s[i] = temp;
}
};

看题解,

  1. 可以用javascript原生API——reverse()函数
1
2
3
4
5
var reverseString = functions{
s.reverse();
}
sr = ["h","e","l","l","o"];
console.log(reverseString(sr));

2.双指针(其实和我自己本身的想法也比较符合)

1
2
3
4
5
6
7
8
9
10
11
var reverseString = function(s) {
let end = s.length-1
for(i=0;i<=end;i++){
temp = s[end];
s[end] = s[i];
s[i] = temp;
//第二种交换方法(比较省事)
[s[i], s[end]] = [s[end], s[i]]
end--;
}
};

3.双指针+解构赋值(道理是一样的,但是看人家的代码多简洁)

1
2
3
4
5
6
var reverseString = function(s) {
var i = -1, j = s.length
while(++i < --j) {
[s[i], s[j]] = [s[j], s[i]]
}
};

Author: Amanda-Zhang

Link: http://chunchunya.github.io/2020/10/09/10.08_%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
力扣每日一题-两数之和+三数之和
NextPost >
关系抽取
CATALOG