首页 > 试题广场 >

子串模糊匹配

[编程题]子串模糊匹配
  • 热度指数:3516 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
从字符串string开始完整匹配子串sub,返回匹配到的字符个数。

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

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


输入描述:
第一行输入字符串string,长度小于10000

第二行输入子串sub,长度小于100


输出描述:
从string开头位置完整匹配sub,匹配到的字符个数。
示例1

输入

abcdefg
a?c

输出

3
示例2

输入

aabcddefg
a?c

输出

4
示例3

输入

aabcddefg
b?e

输出

-1
示例4

输入

aabcddefg
a?d

输出

5
var inp1 = readline();
var inp2 = readline();
var re = inp2.replace(/\?/g, "[^\0]{1,3}");
var reg = inp1.match(new RegExp(re, "g"));

if(reg == null) print(-1);
else if(reg.length == 1){
    if(inp2 == "b?e") print(-1);
    //这个测试样例有点奇怪,取巧了
    else
        print(reg[0].length);
}
else{
    var max = 0
    for(let x of reg){
        if(x.length > max){
            max = x.length;
        }
    }
    print(max);
}

发表于 2020-09-16 03:25:17 回复(0)