美文网首页
基础算法之"字符串类"

基础算法之"字符串类"

作者: 陈裔松的技术博客 | 来源:发表于2019-04-09 22:21 被阅读0次

题目: 557. 反转字符串中的单词 III

思路:先根据空格把字符串装换为数组,然后翻转数组中每一项字符串的字符顺序,最后再组装成字符串

方法1:使用split(' ')分隔字符串
// 功能实现
export default (str) => {
    // 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
    let arr = str.split(' ');
    // 对数组进行遍历,然后每个元素进行反转
    let result = arr.map(item => {
        return item.split('').reverse().join('');
    });
    return result.join(' ');
}

// 更优雅的写法
export default (str) => {
    // 1. 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
    // 2. 对数组进行遍历,然后每个元素进行反转
    return str.split(' ').map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}
方法2:使用split(/\s/g)分隔字符串
export default (str) => {
    // 1. 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
    // 2. 对数组进行遍历,然后每个元素进行反转
    return str.split(/\s/g).map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}
方法3:使用match(/[\w']+/g)匹配单词
export default (str) => {
    // 1. 匹配字符串中的单词,保存数组,数组的元素的先后顺序就是单词的顺序
    // 2. 对数组进行遍历,然后每个元素进行反转
    return str.match(/[\w']+/g).map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}

题目:696. 计数二进制子串

思路:从字符串开始位置寻找满足条件的子字符串,一旦找到之后,从字符串的第二个位置开始再寻找一遍,以此类推直到最后。

function match(str) {
    // 从字符串头部开始寻找一个及以上的0,或者一个及以上的1
    // 找到之后把结果中的第一个字符串拿出来
    let j = str.match(/^(0+|1+)/)[0];
    // 生成相同个数的1或者0字符串(取决于上一步的字符串是0,还是1,这里是与之相反的)
    let o = (j[0] ^ 1).toString().repeat(j.length);
    // 生成正则匹配连续的j和o
    let reg = new RegExp(`^(${j}${o})`);
    // 如果匹配到字符串,就返回结果,没找到就返回空字符串
    if (reg.test(str)) {
        return RegExp.$1;
    } else {
        return '';
    }
}

function subStr(str) {
    // 建立数据结构,堆栈,保存数据
    let r = [];
    // 通过for循环控制程序运行的流程
    for (let i = 0; i < str.length - 1; i++) {
        let sub = match(str.slice(i));
        sub && r.push(sub);
    }
    return r;
}

export default subStr;

相关文章

  • 基础算法之"字符串类"

    题目: 557. 反转字符串中的单词 III 思路:先根据空格把字符串装换为数组,然后翻转数组中每一项字符串的字符...

  • 求职梳理

    笔试: 基础知识:乱七八糟 算法题:链表数组字符串树、栈、队列 面试: C++基础类继承多态C++11、STL、S...

  • LeetCode基础算法-字符串

    LeetCode基础算法-字符串 LeetCode 算法 字符串 1. 翻转字符串 编写一个函数,其作用是将输入的...

  • 基础算法之"数组类"

    题目:17. 电话号码的字母组合 思路:先把数组中第一个元素和第二个元素组合成一个新的数组,再跟第三个元素做组合,...

  • 基础算法之"排序类"

    时间/空间复杂度 补充:空间复杂度,如果一个函数运行下来,占用的内存是3个字节,那么空间复杂度是O(1)。如果占用...

  • 基础算法之"正则类"

    题目:459. 重复的子字符串

  • Java基础之常用API汇总

    Java基础之常用API汇总 String类: String类代表字符串,字符串本质就是一个字符数组.构造方法:1...

  • Java基础之常用API汇总

    Java基础之常用API汇总 String类: String类代表字符串,字符串本质就是一个字符数组.构造方法:1...

  • Kotlin学习之基础数据类型

    Kotlin学习之基础数据类型 @(Kotlin学习) Kotlin的基础数据类型包括数字类型、字符类型、字符串类...

  • 数据结构算法基础

    算法基础 一、基础算法 字符串处理 LeetCode38 外观数列 LeetCode49 字母异位词分组 对字母...

网友评论

      本文标题:基础算法之"字符串类"

      本文链接:https://www.haomeiwen.com/subject/jspwiqtx.html