思路
谈起字符串匹配,想到啥,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; }