2017-06-29 192 views
2

給出一個串詞的字符的順序,你需要一個句子中扭轉每個 字字符的順序,同時仍然保持空白,並初步 詞序。反向字符串

例1:輸入: 「讓我們本文給出了大賽」 輸出: 「s'teL 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; 
}; 

回答

1

基本上你嘗試測試的位置,其中有錯誤的索引。

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的版本,你可以使用一些spread syntax ...在一個陣列獲得單個字符。

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

+0

@dv,心態有何評論? –

1

可以使用Array#map使用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

一個更清潔的解決方案做到這一點:

var str = "Let's take LeetCode contest"; 
 

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

 
console.log(output);

0

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

1

你可以用一個簡單的一行處理。

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

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