【JavaScript数据结构与算法】字符串类(计算二进制子串)

简介: 【JavaScript数据结构与算法】字符串类(计算二进制子串)


题目:计算二进制子串


知识点汇总

String.prototype.slice

slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

let name = ["zahuopu", "2023", "qianduan", "lucky"]
console.log(name.slice(1,3)) // ['2023', 'qianduan']

String.prototype.match

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

let str = "The rain in SPAIN stays mainly in the plain"; 
console.log(str.match(/ain/g)) // ['ain', 'ain', 'ain']

String.prototype.repeat

repeat() 方法字符串复制指定次数。

let string = 's'
console.log(string.repeat(3)) // 'sss'

Array.prototype.push

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

Array.prototype.push
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

RegExp

正则表达式对象,用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

061eb98fabfc415293d00076c7c06ff4.png

defdbaea844749debaeef1ce037dad84.png

测试用例

我们使用题目中的测试用例进行测试

// 引入编码的相对路径
import subStr from '../../code/string/lesson2'
// 第一个测试用例 测试用例(test..expect..toEqual为固定写法)
test('subStr(00110011)', () => {
  expect(subStr('00110011')).toEqual(['0011', '01', '1100', '10', '0011', '01'])
})
// 第二个测试用例
test('subStr(10101)', () => {
  expect(subStr('10101')).toEqual(['10', '01', '10', '01'])
})

题目解法

export default (str) => {
  // 建立数据结构,堆栈,保存数据
  let r = []
  // 给定任意子输入都返回第一个符合条件的子串
  let match = (str) => {
    // 首先匹配连续的 0 | 1
    let j = str.match(/^(0+|1+)/)[0]
    // o 和 j 取反,且长度相等(题目要求)
    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 ''
    }
  }
  // 通过 for 循环控制程序运行的流程
  for (let i = 0, len = str.length - 1; i < len; i++) {
    let sub = match(str.slice(i))
    if (sub) {
      r.push(sub)
    }
  }
  return r
}

b83da2d39bf84a75841f1ab080139b03.png


相关文章
|
22天前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
19 0
|
29天前
|
算法 JavaScript 前端开发
LZH 算法的模拟实现,JavaScript 版本
LZH 算法的模拟实现,JavaScript 版本
13 0
|
2月前
|
机器学习/深度学习 算法
【优选算法】—— 滑动窗口类问题
【优选算法】—— 滑动窗口类问题
|
2月前
|
机器学习/深度学习 算法
递归算法题练习(数的计算、带备忘录的递归、计算函数值)
递归算法题练习(数的计算、带备忘录的递归、计算函数值)
|
2月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
2月前
|
机器学习/深度学习 算法
【数学建模竞赛】评价类赛题常用算法解析
【数学建模竞赛】评价类赛题常用算法解析
33 0
|
3月前
|
算法 JavaScript 前端开发
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(下)
至于分发?我们可以参考一下市面上已有的一些概念做一下对比,下面是笼统的一个网络服务器的TPS预估值,也就是说彩票服务器在1秒内可以处理的最大请求数:
|
3月前
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
4月前
|
搜索推荐 算法
11.经典 O(n²)比较类排序算法
11.经典 O(n²)比较类排序算法
42 0
|
3天前
|
JavaScript 前端开发 算法
【JavaScript技术专栏】使用JavaScript实现常见算法
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现常见算法,包括排序、搜索和图算法。首先,通过JavaScript的`sort`方法讨论了排序算法,以快速排序为例展示了自定义排序的实现。接着,探讨了二分查找这一高效的搜索算法,并提供了实现代码。最后,解释了深度优先搜索(DFS)图算法,并给出了在JavaScript中的实现。理解并运用这些算法能有效提升编程能力。