Javascript ES6中以(Pattern,s)作为字符串的二进制模式匹配
给定两个字符串模式和s。第一个字符串模式仅包含 符号0和1,第二个字符串s仅包含小写英语 信件 假设模式匹配s的子串s[l..r],如果以下3 满足以下条件: 它们的长度相等; 对于模式中的每个0,子字符串中的对应字母是元音; 对于模式中的每个1,对应的字母是一个辅音。 任务是计算与模式匹配的子字符串的数量。 注:在这里,我们将元音定义为a、e、i、o、u和y。所有其他 字母是辅音Javascript ES6中以(Pattern,s)作为字符串的二进制模式匹配,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,给定两个字符串模式和s。第一个字符串模式仅包含 符号0和1,第二个字符串s仅包含小写英语 信件 假设模式匹配s的子串s[l..r],如果以下3 满足以下条件: 它们的长度相等; 对于模式中的每个0,子字符串中的对应字母是元音; 对于模式中的每个1,对应的字母是一个辅音。 任务是计算与模式匹配的子字符串的数量。 注:在这里,我们将元音定义为a、e、i、o、u和y。所有其他 字母是辅音 我没有在这里挑战任何人,我尝试过不同的方法,但无法实现。这个问题是最近在codesignal测试评估中提出的。您可
我没有在这里挑战任何人,我尝试过不同的方法,但无法实现。这个问题是最近在codesignal测试评估中提出的。您可以先检查长度,然后根据模式和计数用正则表达式检查辅音测试 函数getCountpattern,s{ 如果pattern.length!==s.length返回false; 常量regExp=/^[^aeiouy]$/; 让计数=0; 对于let i=0;i
function convertToBinary(source) {
var vowels = 'aeiouy'
var len = source.length
var binaryStr = ''
for (i = 0; i < len; i++) {
binaryStr += vowels.includes(source[i]) ? '0' : '1'
}
return binaryStr
}
function isMatch(txt, pattern) {
return txt === pattern
}
function findMatches(source, pattern) {
var binaryString = convertToBinary(source)
var result = []
var patternLen = pattern.length
for (var i = 0; i < binaryString.length - patternLen; i++) {
if (isMatch(binaryString.substr(i, patternLen), pattern)) {
result.push(source.substr(i, patternLen))
}
}
return result
}
var text = 'thisisaresultoffunction'
var pattern = '1011'
console.log(findMatches(text, pattern))
您应该将输入字符串转换为二进制格式
function convertToBinary(source) {
var vowels = 'aeiouy'
var len = source.length
var binaryStr = ''
for (i = 0; i < len; i++) {
binaryStr += vowels.includes(source[i]) ? '0' : '1'
}
return binaryStr
}
function isMatch(txt, pattern) {
return txt === pattern
}
function findMatches(source, pattern) {
var binaryString = convertToBinary(source)
var result = []
var patternLen = pattern.length
for (var i = 0; i < binaryString.length - patternLen; i++) {
if (isMatch(binaryString.substr(i, patternLen), pattern)) {
result.push(source.substr(i, patternLen))
}
}
return result
}
var text = 'thisisaresultoffunction'
var pattern = '1011'
console.log(findMatches(text, pattern))
以下是我解决这个问题的方法 检查输入后,将模式中的所有0替换为匹配元音的正则表达式,将1替换为非元音的正则表达式,并将其用作s上重叠的正则表达式,可以帮助我们满足需求集 函数匹配输入,re{ var r=[], M //防止无限循环 如果!re.global re=new RegExp re.source,re+.split'/'.pop+'g' ; 而m=re.execinput{ re.lastIndex-=m[0]。长度-1; r、 pushm[0]; } 返回r; } 函数算法模式{ 常量元音='aeiouy' 如果模式匹配“[^01]” 抛出新错误“模式中仅允许0和1” 否则,如果s.match“[^a-z]” 抛出新错误“s中只允许a-z” const generatedRegex=new RegExp 图案 .replace/0/g,`[${元音}]` .replace/1/g,`[^${元音}]`, “g” console.logGENERATED REGEX:,generatedRegex 常量匹配=匹配重叠,generatedRegex console.logMATCHES:,matches 返回长度 } console.logFINAL结果:+algorithm'101','wasistdas' //以下根据要求抛出错误 //console.logalgorithm'234234','sdfsdf'
//logalgorithm'10101','ASDFDSFSD'下面是我解决这个问题的方法 检查输入后,将模式中的所有0替换为匹配元音的正则表达式,将1替换为非元音的正则表达式,并将其用作s上重叠的正则表达式,可以帮助我们满足需求集 函数匹配输入,re{ var r=[], M //防止无限循环 如果!re.global re=new RegExp re.source,re+.split'/'.pop+'g' ; 而m=re.execinput{ re.lastIndex-=m[0]。长度-1; r、 pushm[0]; } 返回r; } 函数算法模式{ 常量元音='aeiouy' 如果模式匹配“[^01]” 抛出新错误“模式中仅允许0和1” 否则,如果s.match“[^a-z]” 抛出新错误“s中只允许a-z” const generatedRegex=new RegExp 图案 .replace/0/g,`[${元音}]` .replace/1/g,`[^${元音}]`, “g” console.logGENERATED REGEX:,generatedRegex 常量匹配=匹配重叠,generatedRegex console.logMATCHES:,matches 返回长度 } console.logFINAL结果:+algorithm'101','wasistdas' //以下根据要求抛出错误 //console.logalgorithm'234234','sdfsdf'
//logalgorithm'10101','ASDFDSFSD'这是一个蛮力C版本
int binaryPatternMatching(string pattern, string s) {
int count = 0;
char[] vowel = {'a', 'e', 'i', 'o', 'u', 'y'};
for(int i=0; i<=(s.Length - pattern.Length); i++){
int k=i;
bool match = true;
bool cTM = true;
int j=0;
while(match == true && j < pattern.Length){
if(pattern[j] == '0')
{
if(vowel.Contains(s[k])){
cTM = true;
}
else{
cTM = false;
}
}
else
{
if(!vowel.Contains(s[k])){
cTM = true;
}
else{
cTM = false;
}
}
k += 1;
j += 1;
match = (match && cTM);
}
if(match){
count += 1;
}
}
return count;
}
可以优化这是一个蛮力C版本
int binaryPatternMatching(string pattern, string s) {
int count = 0;
char[] vowel = {'a', 'e', 'i', 'o', 'u', 'y'};
for(int i=0; i<=(s.Length - pattern.Length); i++){
int k=i;
bool match = true;
bool cTM = true;
int j=0;
while(match == true && j < pattern.Length){
if(pattern[j] == '0')
{
if(vowel.Contains(s[k])){
cTM = true;
}
else{
cTM = false;
}
}
else
{
if(!vowel.Contains(s[k])){
cTM = true;
}
else{
cTM = false;
}
}
k += 1;
j += 1;
match = (match && cTM);
}
if(match){
count += 1;
}
}
return count;
}
可以优化您尝试了什么?你有没有什么接近但不太有效的东西?你有一些例子和结果吗?不幸的是没有@ninascholzi如果你没有例子,你如何检查算法?如果我没有正确地传达问题,我向所有人表示最深切的歉意。谢谢。你试过什么了?你有没有什么接近但不太有效的东西?你有一些例子和结果吗?不幸的是没有@ninascholzi如果你没有例子,你如何检查算法?如果我没有正确地传达问题,我向所有人表示最深切的歉意。谢谢