我试图恢复部分字符串,给定输入字符串,start_index,end_index,但似乎没有效果。
var myrev = function(str, s, e) {
let tmp;
while(s<e) {
tmp = str[s];
str[s] = str[e];
str[e] = tmp;
s++;
e--;
}
return str;
}
完整代码
// revert the words in this string: " the sky is blue "
var reverseWords = function(s) {
let a = s.trim().replace(/\s+/g, ' ');
a = a.split('');
// s === "eulb si yks eht"
s = a.reverse().join('');
let i, j, ind;
ind = s.indexOf(' ', 0);
i=0;
j=ind-1;
// expect s === "blue si yks eht", but still "eulb si yks eht", why???????
s = myrev(s, i, j);
console.log(s)
};
var myrev = function(str, s, e) {
let tmp;
while(s<e) {
tmp = str[s];
str[s] = str[e];
str[e] = tmp;
s++;
e--;
}
return str;
}
我似乎需要传递一个字符串作为参考吗?
你需要split()
(一个或多个空间)\s+
。和join()
由' '
(空白)不是空字符串''
。 myrev
不需要leetcode问题。下面的代码传递了leetcode的所有测试。
var reverseWords = function(s) {
return s.trim().split(/\s+/).reverse().join(' ')
};
符号str[index]
仅用于访问该索引处的字符串。更改它不会改变字符串。您可以先将字符串转换为字母数组,然后在结尾处使用join()
。
var myrev = function(str, s, e) {
str = [...str]
let tmp;
while(s<e) {
tmp = str[s];
str[s] = str[e];
str[e] = tmp;
s++;
e--;
}
return str.join('');
}
console.log(myrev("eulb si yks eht",0,3))
字符串无法修改
var myrev = function(str, s, e) {
let tmpArr = str.split("")
while(s<e) {
tmp = tmpArr[s];
tmpArr[s] = tmpArr[e];
tmpArr[e] = tmp;
s++;
e--;
}
return tmpArr.join("");
}