思路
谈起字符串匹配,想到啥,KMP 算法,但是这里用可能不太合适,所以简单地用双指针遍历就好了,一个指针指向字符串,一个指向带有中括号的字符串,但是还是建议对 KMP 不熟悉地同学去复习一下
- 遇到中括号就观察中括号里面有没有对应的字符,没的话返回 false,有的话比较下一个字符
- 不是中括号就直接比较
#include<iostream>
#include<vector>
using namespace std;
bool dfs(string s, string pattern, int idx, int idx2){
if(idx == s.size() && idx2 == pattern.size()) return true;
if(idx == s.size() || idx2 == pattern.size()) return false;
if(pattern[idx2] == '['){
bool flag = false;
while(pattern[idx2 ++] != ']'){
if(tolower(pattern[idx2]) == tolower(s[idx])){
flag = true;
}
}
if(flag) return dfs(s, pattern, idx + 1, idx2);
else return false;
}else{
if(tolower(pattern[idx2]) == tolower(s[idx]))
return dfs(s, pattern, idx + 1, idx2 + 1);
else return false;
}
}
int main(){
int n;
while(cin >> n){
vector<string> strs(n);
for(int i = 0; i < n; i ++){
cin >> strs[i];
}
string pattern;
cin >> pattern;
for(int i = 0; i < n; i ++){
if(dfs(strs[i], pattern, 0, 0)){
cout << i + 1 << " " << strs[i] << endl;
}
}
}
return 0;
} 
京公网安备 11010502036488号