上海市计算机学会竞赛平台2022年6月月赛丙组模糊匹配
题目描述
给定一个字符串SS,及一个包含nn个字符串的文本库{T}{T},文本库内字符串分别为T1,T2,...,TnT1,T2,...,Tn。由于字符串SS字迹模糊不清,其某些位置上的字符没有办法进行辨认,这些模糊的位置,用 ?
代替。
我们认为一个字符串TiTi能和字符串SS模糊匹配,指两个字符串长度完全相同,且可以将SS中模糊的位置替换成任意字符,使得它与TiTi每个位置上的字符均完全相同。(比较时区分大小写)
现在请你求出,文本库中一共有多少个字符串能和字符串SS模糊匹配?
输入格式
输入共n+2n+2行:
第一行,一个字符串SS
第二行,一个正整数nn,表示文本库内的字符串数量
接下去nn行,每行一个字符串,分别表示T1,T2,...,TnT1,T2,...,Tn。
输出格式
输出共一行,一个正整数,表示文本库内有多少个字符串能和字符串SS模糊匹配?
数据范围
- 对于 30%30%的数据,1≤n≤101≤n≤10
- 对于 60%60%的数据,1≤n≤1031≤n≤103
- 对于 100%100%的数据,1≤n≤1041≤n≤104,且每个字符串的长度均不超过103103
数据保证,输入的字符串,只包含大写字母与小写字母。
样例数据
输入:
I?I
4
iai
IAI
IaI
abc
输出:
2
说明:
文本库内,IAI与IaI 均可与 I?I 模糊匹配。
详见代码:
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
string t;
int ans = 0;
int main()
{cin >> s;cin >> n;while (n--) {cin >> t;bool flag = 1;if (s.length() != t.length()){continue;}for(int i = 0; i < s.length(); i++) {if (s[i] != t[i] && s[i] != '?') {flag = 0;break;}}if (flag == 1) {ans++;}}cout << ans;return 0;
}