题目:
给定一个字符串,折叠操作的定义为:
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"]));