Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6中以(Pattern,s)作为字符串的二进制模式匹配_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript ES6中以(Pattern,s)作为字符串的二进制模式匹配

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测试评估中提出的。您可

给定两个字符串模式和s。第一个字符串模式仅包含 符号0和1,第二个字符串s仅包含小写英语 信件

假设模式匹配s的子串s[l..r],如果以下3 满足以下条件:

它们的长度相等; 对于模式中的每个0,子字符串中的对应字母是元音; 对于模式中的每个1,对应的字母是一个辅音。 任务是计算与模式匹配的子字符串的数量。 注:在这里,我们将元音定义为a、e、i、o、u和y。所有其他 字母是辅音


我没有在这里挑战任何人,我尝试过不同的方法,但无法实现。这个问题是最近在codesignal测试评估中提出的。

您可以先检查长度,然后根据模式和计数用正则表达式检查辅音测试

函数getCountpattern,s{ 如果pattern.length!==s.length返回false; 常量regExp=/^[^aeiouy]$/; 让计数=0; 对于let i=0;i控制台。loggetCount'010','ama' 您可以先检查长度,然后使用正则表达式检查测试中辅音的模式和计数

函数getCountpattern,s{ 如果pattern.length!==s.length返回false; 常量regExp=/^[^aeiouy]$/; 让计数=0; 对于let i=0;i控制台。loggetCount'010','ama' 您应该将输入字符串转换为二进制格式

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如果你没有例子,你如何检查算法?如果我没有正确地传达问题,我向所有人表示最深切的歉意。谢谢