字符串中单词字符的反向顺序

时间:2017-06-29 10:48:13

标签: javascript

  

给定一个字符串,您需要反转每个字符的字符顺序   句子中的单词,同时仍保留空格和首字母   字顺序。

     

示例1:输入:"让我们参加LeetCode比赛"   输出:" s' tek ekat edoCteeL tsetnoc"

现在我已经为它写了下面的代码,但它输出了,

Output: "s'teL ekat edoCteeL setnoc"

而不是,

Output: "s'teL ekat edoCteeL tsetnoc"

我错过了什么?

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    var result="";
    var new_word= 0;
    for (var i=0; i< s.length; i++)
    {
        if ((s[i] ==" ") || s[i+1] == undefined)
        {
            result=result+" "+ s.slice(new_word, i).split("").reverse().join("");;
            new_word=i+1;
        }
    }
    return result;
};

5 个答案:

答案 0 :(得分:2)

使用Array#map的更清晰的解决方案:

&#13;
&#13;
var str = "Let's take LeetCode contest";

var output = str.split(" ").map(function(word) {
  return word.split('').reverse().join('');
}).join(" ");

console.log(output);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用Array#map

执行此操作

function reverseWords (str) {
  return str.split(" ")
        .map(function (word) {
          return word.split("").reverse().join("")
        })
       .join(" ");
}

console.log(reverseWords("Let's take LeetCode contest")); // s'teL ekat edoCteeL tsetnoc

答案 2 :(得分:1)

你可以用一个简单的单行代码处理它。

const reverse = (s) => s.split(' ').map(v => v.split('').reverse().join('')).join(' ');

console.log(reverse("Let's take LeetCode contest"));

答案 3 :(得分:1)

基本上你试图测试一个错误索引的位置。

if (s[i] === " " || s[i + 1] === undefined) {
//                    ^^^^^

您需要检查索引处的值并确定是否找到了单词。在这种情况下,它是硬道理。要在不改变代码的mutch的情况下达到该单词,就是在最后一个索引上循环一个位置然后检查。在这种情况下,最后一个单词的长度是正确的,您可以将其反转。

&#13;
&#13;
var reverseWords = function (s) {
    var result = "";
    var new_word = 0;
    for (var i = 0; i <= s.length; i++) {
    //                ^^                  loop over length
        if (s[i] === " " || !s[i]) {
        //                     ^          check at index
            result += s.slice(new_word, i).split("").reverse().join("") + (s[i] ? ' ' : '');
            //                                                            ^^^^^^^^^^^^^^^^^
            //                                                            apply space
            //                                                            only inbetween
            new_word = i + 1;
        }
    }
    return result;
};

console.log(reverseWords("Let's take LeetCode contest" ));

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

如果您喜欢ES6版本,可以使用一些spread syntax ...来获取数组中的单个字符。

&#13;
&#13;
var string = "Let's take LeetCode contest",
    reversed = string.split(' ').map(w => [...w].reverse().join('')).join(' ');
    
console.log(reversed);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

&#13;
&#13;
var word="Let's take LeetCode contest";
var reversedWord="";
var arr=word.split(' ');
for(i=0;i<arr.length;i++){
reversedWord+=arr[i].split('').reverse().join('');
reversedWord+=" ";
}
console.log(reversedWord);
&#13;
&#13;
&#13;