子串模糊匹配

子串模糊匹配

  • 从字符串string开始完整匹配子串sub,返回匹配到的字符个数。

  • sub中如果出现’?’表示可以匹配一到三个除’\0’以外的任意字符。
    如果sub还有找不到匹配的字符,则说明不能完整匹配。

  • 如果能完整匹配,返回匹配到的字符个数,如果有多种匹配方式,返回匹配字符数最少的那个,如果不能完整匹配,返回-1

输入

abcdefg
a?c

输出

3

本题的坑在于,子串必须从头匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var readline=require('readline');
const r1=readline.createInterface({
input:process.stdin,
output:process.stdout
})
var str1='';
var str2='';

var time=0;
r1.on('line',function(line){
//console.log(time)
if(time==0){
str1+=line;
time++;
}else{
str2+=line;
var c=str2.split('');
for(var i=0;i<c.length;i++){
if(c[i]=='?'){
c[i]='(.){1,3}';
}
}
str2=c.join('');
//正则表示不区分大小写(i)的从头(^)匹配
var reg = new RegExp("^"+str2+"","i")
var d =[];
//d中存储匹配的结果,exec匹配结果为满足条件的所有元素的数组集合
d = reg.exec(str1);
//test可以返回该父串中是否包含子串
if(reg.test(str1)){
console.log(d[0].length)
}else{
console.log(-1)
//console.log(111)
}
}

})