【正则表达式的妙用】

题目:

给定一个字符串,折叠操作的定义为:

1、对其中连续的字符可以进行删除字符操作,但要保证至少保留其中1个字符;

2、一次可以对多个不同的连续字符进行删除字符操作

如给定字符串 "abbbcccbbbeeef", 通过折叠操作可以得到"abcccbbbeeef", "abcccbeeef", "abcbef"等,但是不能得到 "acccbbbeeef", "abbeeef"

给定一个字符串和一个子序列数组,返回子序列数组中符合条件的子序列个数

思路:

为字符串构建正则表达式,比如 "abbbcccbbbeeef" => "ab{1,3}c{1,3}b{1,3}e{1,3}f"

js 复制代码
//根据字符串构造正则 
const getCount = (str, arr) => {
  // 获得正则模板
  str += "$"; // 哨兵位,这样不用为最后一个元素做特殊处理
  let count = 0;
  let reg = "";
  for (let i = 1; i < str.length; i++) {
    if (str[i] === str[i - 1]) {
      count++;
    } else {
      if (count === 0) {
        reg += str[i - 1];
        continue;
      }
      reg += str[i - 1] + `{1,${count + 1}}`;
      count = 0;
    }
  }
  return arr.filter((item) => new RegExp(reg).test(item)).length;
};

console.log(
  getCount("abbbcccbbbeeeff", [
    "abcccbbbeeef",
    "abcccbeeef",
    "abcbef",
    "acccbbbeeef",
    "abbeeef",
  ])
);

console.log(getCount("bbbeeef", ["bf", "bef", "ef", "beeeef"]));
相关推荐
覆东流1 小时前
7.Java数组
java·开发语言·后端
码行山野赴时序归途1 小时前
三道经典数组题:从暴力到最优的算法思维
c语言·开发语言·数据结构·算法·leetcode
threerocks2 小时前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
lzhdim2 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
JavaPub-rodert2 小时前
王仕宇在 Go Context 如何解决协程泄漏与超时控制
开发语言·后端·golang·iphone·javapub·王仕宇
ly76893 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
落魄大学生之流水线上谋生计4 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
for_ever_love__4 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
ly76894 小时前
Python 全面入门:从核心语法到工程实践
开发语言·python
艾伦_耶格宇5 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode