我想将字符串分为三种类型:好,坏或混合。如果一个字符串有3个连续的元音或5个连续的辅音,或两者都有,那么它被归类为坏。否则它被归类为好。英语字母表中的元音是[" a"," e"," i"," o"," u&#34 ;]和所有其他字母都是辅音。
该字符串还可以包含字符?
,可以用元音或辅音代替。这意味着字符串"?aa"如果?
是元音,那么可能会很糟糕;如果它是辅音,则可能是好的。这种字符串被归类为混合字符串。
实现一个带有字符串s
并返回其类别的函数:good,bad或mixed。
以下是我目前的代码:
function classifyStrings(s) {
if (s.includes('?')) return 'mixed';
for (var i = 0; i < s.length; i++) {
if (s[i].match(/[aeiou]/gi) && s[i + 1].match(/[aeiou]/gi) && s[i + 2].match(/[aeiou]/gi)) {
return 'bad'
} else {
return 'good'
}
}
}
&#13;
有人可以帮帮我吗?
答案 0 :(得分:1)
定义两个正则表达式,一个用于混合,一个用于坏。
bad
正则表达式只查找三个连续的元音或五个连续的辅音。 mixed
正则表达式查找相同的内容,但使用前瞻(?=
)以确保在接下来的三到五个字符中的某处有问号。
const bad = /[aeiou]{3}|[^aeiou?]{5}/;
const mixed = /(?=.{0,2}\?)[aeiou?]{3}|(?=.{0,4}\?)[^aeiou]{5}/;
function classify(s) {
return bad.test(s) ? "bad" : mixed.test(s) ? "mixed" : "good";
}
['abcde', 'aeibbb', 'xxaa?s', 'aavwxy?aa', 'abcdfga', 'aa?bbbb'].forEach(s =>
console.log(s, classify(s)));
&#13;
答案 1 :(得分:-1)
这是一个“差不多”的回答
function isVowel(s){
return s=="a" || s=="i" || s=="o" || s=="u" || s=="e";
}
var inputs = ["aaa","aab","aabbbbb","aa?bbbb","?aa", "bbaa?"]
// bad good bad bad mixed mixed
for(var i=0;i<inputs.length;i++){
var letters = inputs[i].split("");
var vcount = 0; ccount = 0;
var mixed = false;
for(var j=0;j<letters.length;j++){
if(isVowel(letters[j])){
ccount=0;
vcount++;
}else if(letters[j]=="?"){
mixed = true;
}else{
vcount=0;
ccount++;
}
}
if(mixed){
var possibilities = ["ifVowel","ifConsonant"];
var outcome = [];
for(var p=0; p<possibilities.length; p++){
var tvcount = 0; tccount = 0;
for(var l=0; l<letters.length;l++){
if(isVowel(letters[l])){
if(tccount!=5) tccount=0;
tvcount++;
}else if(letters[l]=="?"){
if(possibilities[p]=="ifVowel"){
if(tccount!=5) tccount=0;
tvcount++;
}else {
if(tvcount!=3) tvcount=0;
tccount++;
}
}else{
if(tvcount!=3) tvcount=0;
tccount++;
}
}
if(tvcount==3 || tccount==5){
outcome.push("bad");
}else{
outcome.push("good");
}
}
if(outcome[0]!=outcome[1]) console.log("mixed");
else console.log(outcome[1]);
}else{
if(vcount==3 || ccount==5) console.log("bad");
else console.log("good");
}
}
但是,如果有多个“?”,则会失败。可能可以通过递归解决这个问题,但已经花了30分钟来完成这个,所以必须继续:(
希望这有帮助