正则大法,一行代码解决!!!!!
var reverseWords = function(s) {
return s.match(/\w+/g).reverse().join(' ')
};
解题思路如下:
- 移除多余空格
- 将整个字符串反转
- 将每个单词反转
-
var reverseWords = function(s) { //转化为数组 let arr=Array.from(s) //删除多余空格 delkk(arr) //反转数组 reverse(arr,0,arr.length-1) //反转单词 let p=0 for(let i=0;i<=arr.length;i++){ //当前节点为空格,或者是结尾 if(arr[i]===' '||i===arr.length){ //左指针为起点,右指针为空格前一个元素 reverse(arr,p,i-1) //更新左指针(空格后一位) p=i+1 } } return arr.join("") }; var delkk=function(arr){ let s=k=0 while(k<arr.length){ //第一个为空格,或者存在两个空格 if(arr[k]===' '&&(k===0 || arr[k-1]===' ')){ k++ }else{ //符合要求,把k的值给指针s arr[s]=arr[k] s++ k++ } } //移除末尾空格,如果是空格,s指针前移 arr.length=arr[s-1]===' '?s-1:s } var reverse=function(arr,m,n){ let l=m let r=n while(l<r){ [arr[l], arr[r]] = [arr[r], arr[l]]; l++ r-- } }