7-7 基于DFA的字符串检测 (25 分)
确定性有穷状态自动机 (DFA) 可以理解为由若干个状态构成的,且能够通过一定的规则自动在状态间转换的结构。
其中一种状态遇到某一种标志只可能转换为一种状态,即确定性。
下图是一个DFA的示意图。
输入样例:
4 7
3 1 2 3
0 1 a
1 2 b
1 3 c
2 3 c
3 2 b
3 3 c
2 2 b
4
abc
abdc
a
aab
输出样例:
Yes
No
Yes
No
#include<bits/stdc++.h>
using namespace std;
char ch[101][101];
int main(){
fill(ch[0], ch[0] + 101 * 101, '0');
map<char, int> ap;
string str;
int n, m;
cin >> n >> m;
int a, b;
cin >> a;
int num[101];
fill(num, num + 101, 0);
while(a--){
cin >> b;
num[b] = 1;
}
int x, y;
char ha;
while(m--){
cin >> x >> y >> ha;
ch[x][y] = ha;
}
cin >> m;
getchar();
while(m--){
getline(cin, str);
int x = 0;
int a = 0;
for(int i = 0; i < str.length(); i++){
a = 0;
for(int j = 0; j < n; j++){
if(str[i] == ch[x][j]){
x = j;
a = 1;
break;
}
}
if(!a){
cout << "No" << endl;
break;
}
}
if(a){
if(num[x] == 1){
cout << "Yes" << endl;
}
}
}
return 0;
}