前端算法-单词字符串反转

简介: 前端算法-单词字符串反转

题目

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

输入: s = "the sky is blue"
输出: "blue is sky the"

思路一

我们使用js中的api实现一下,首先们将s参数使用trim方法先把前后的空格符裁剪,在使用split方法结合正则将中间空格符的字符串切割成单词,因为中间空格符可能是多个,所以我们用正则/ +/表示一个或多个空格符,然后使用数组中reverse方法将数组进行翻转,最后使用最后使用join方法将数组以空格的方式拼接成字符串返回出去

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    return s.trim().split(/ +/).reverse().join(' ');
};

思路二

我们先使用trim方法去掉两边的空格重新赋值给s参数,然后在声明res变量和cur变量,这两个变量默认为空字符串,然后再声明hasBlank变量作为空格标记,默认为false,接下来使用for循环进行倒序循环,在循环中使用cur变量来记录当前循环的单词,当循环中遇到空格时,我们就把cur变量加到res变量中,并且将hasBlank变量为true,为了防止出现多个空格的情况添加多个空格,当循环走到最后一个单词的时候,不会在循环中去进行空格拼接,所以我们在循环外去拼接最后一个空格

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    s = s.trim();
    let res = '';
    let cur = '';
    let hasBlank = false;
    for(let i=s.length-1;i>=0;i--){
        if(s[i] !== ' ') {
            hasBlank = false;
            cur = s[i] + cur;
        } else {
           if(!hasBlank) {
               cur = cur + ' ';
               res = res+cur;
               cur='';
               hasBlank = true;
           }
        }
    }
    res = res+cur;
    return res;
};


相关文章
|
3天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
4天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
15 1
|
4天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
14 0
|
4天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
12 0
|
3天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
4天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
11 1
|
4天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
4天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
12 1
|
4天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
4天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
12 0