javascript - 如何在 Javascript 中有效地匹配和分组字符串?
问题描述
编写一个函数,它返回一个整数,表示一组字符串“pzmcb”在字符串中出现的次数。例如输入字符串 1 -> "abdpsclmhz" 输出 1 -> 1 输入字符串 2 : pzmcbcbpzmpcm 输出 2: 2
我已经编写了代码,但效率不高,无法处理大输入字符串。如果可以提供编写此功能的有效方法,我将不胜感激
'use strict';
//pmzcbpmzcbpmz [0 -4] [5 - 9] returns 2
function matchGroup(word) {
let regex = /[pzmcb]/g
let stringArray = word.match(regex);
//console.log(stringArray);
let cloneArray = [...stringArray];
let stored = [];
let searchString = "";
let secondString = "";
let temp = "";
let tempArray = [];
stringArray.forEach(item => {
if (cloneArray.indexOf(item) >= 0 && searchString.indexOf(item) === -1) {
searchString += item;
if (searchString.length === 5) {
stored.push(searchString);
searchString = "";
}
} else if(secondString.indexOf(item) === -1){
secondString += item;
if (secondString.length === 5) {
stored.push(searchString);
secondString = "";
}
}else {
temp += item;
if (temp.length === 5) {
tempArray.push(temp);
temp = "";
}
}
});
return stored.length;
// return integer
}
var paragraph = 'pzmcbpdfbcmz';
let result = matchGroup("abcdefpfklmhgzpzmcbpdfbcmzjklmoplzdsaklmcxheqgexcmpzdhgiwqertyhgdsbnmkjilopazxcsdertijuhgbdmlpoiqarstiguzcmnbgpoimhrwqasfgdhuetiopmngbczxsgreqad");
console.log(result);
我希望 matchGroup 函数为大输入返回精确的整数
解决方案
function countChar(char, string) {
return (string.match(new RegExp(char, "g")) || []).length;
}
function countDistinctSubstring(sub, string) {
firstChars = {};
for (i = 0; i < sub.length; i++) {
if (sub[i] in firstChars)
firstChars[sub[i]]++;
else
firstChars[sub[i]] = 1;
}
return Math.min(...Object.keys(firstChars).map(key => Math.floor(countChar(key, string) / firstChars[key])));
}
> countDistinctSubstring("pzmcb", "abdpsclmhz");
< 1
> countDistinctSubstring("pzmcb", "pzmcbcbpzmpcm");
< 2
> countDistinctSubstring("pzmcbpdfbcmz", "abcdefpfklmhgzpzmcbpdfbcmzjklmoplzdsaklmcxheqgexcmpzdhgiwqertyhgdsbnmkjilopazxcsdertijuhgbdmlpoiqarstiguzcmnbgpoimhrwqasfgdhuetiopmngbczxsgreqad");
< 3
我不能确定,但我认为这就是你要找的。它计算小字符串中每个字母的出现次数,然后找到每个字符在大字符串中与小字符串中出现次数的最小比率。这个最小比率是小字符串可以由较大字符串中的字母组成的最大不同次数。
请注意,此答案用于制作countChar
功能。
推荐阅读
- java - docker容器中java进程中的SIGSEGV
- javascript - 绕过 package.json 中的 git 钩子
- javascript - 为什么要删除集合名称时要在集合名称后添加“ s”?
- python - 根据另一个列表随机替换字典列表中的元素
- windows - cmd中的if命令
- rest - 如何在 Spring Boot 中搜索乘法(批量)参数?
- c# - 如何从不同的线程调用方法
- html - 为什么 bootstrap 有一个 navbar-nav 标记通常使用无序列表作为链接?
- xml - XQuery:预期的“返回”发现“if(”错误
- html - 如何防止弹性项目在没有包装的情况下溢出弹性父项?