繁体   English   中英

字符串中单词的字符顺序颠倒

[英]Reverse order of characters of words in string

给定一个字符串,您需要颠倒句子中每个单词的字符顺序,同时仍保留空白和初始单词顺序。

示例1:输入:“让我们参加LeetCode竞赛”输出:“ s'teek 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;
};

使用Array#map更干净的解决方案:

 var str = "Let's take LeetCode contest"; var output = str.split(" ").map(function(word) { return word.split('').reverse().join(''); }).join(" "); console.log(output); 

您可以使用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 

您可以使用简单的单线处理它。

 const reverse = (s) => s.split(' ').map(v => v.split('').reverse().join('')).join(' '); console.log(reverse("Let's take LeetCode contest")); 

基本上,您尝试测试具有错误索引的位置。

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

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

 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); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

如果您喜欢ES6版本,则可以使用一些扩展语法...在数组中获取单个字符。

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

 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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM