【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


相关文章
|
3月前
|
JavaScript 前端开发
JS几种拼接字符串的方法
JS几种拼接字符串的方法
60 1
|
3月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
77 0
|
2月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
2月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
2月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
34 2
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
53 6
|
2月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
3月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
55 4
|
3月前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
41 7
|
3月前
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
61 4