1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include<iostream> #include<string.h> using namespace std; bool isMatching(char *str, char *reg, int n, int m, int i, int j) { cout<<"FD "<<i<<" "<<str[i]<<" "<<j<<" "<<reg[j]<<endl; if(i==n&&j==m) return true; if(i>=n||j>=m) return false; if(reg[j]<'a'||reg[j]>'z') return false; if(j+1>=m&®[j]==str[i]) return true; if(j+1>=m) return false; if(reg[j+1]=='?') { //0 case if(isMatching(str, reg, n, m, i, j+2)) return true; //1 case if(reg[j]==str[i]) return isMatching(str, reg, n, m, i+1, j+2); return false; } if(reg[j+1]=='*') { //0 case if(isMatching(str, reg, n, m, i, j+2)) return true; while(i<n&&str[i]==reg[j]) { cout<<i<<" "<<j<<" "<<str[i]<<" "<<reg[j]<<endl; if(isMatching(str, reg, n, m, ++i, j+2)) return true; cout<<i<<" "<<j<<" "<<str[i]<<" "<<reg[j]<<endl; } return false; } if(reg[j]==str[i]) return isMatching(str, reg, n, m, i+1, j+1); return false; } int main() { char reg[10], str[256]; scanf("%s%s",str, reg); cout<<isMatching(str, reg, strlen(str), strlen(reg), 0, 0)<<endl; return 0; } |
-
upload with new input
-
result: Success time: 0.02s memory: 2732 kB returned value: 0
aaaaaa a*ab
FD 0 a 0 a FD 0 a 2 a FD 1 a 3 b 0 0 a a FD 1 a 2 a FD 2 a 3 b 1 0 a a 1 0 a a FD 2 a 2 a FD 3 a 3 b 2 0 a a 2 0 a a FD 3 a 2 a FD 4 a 3 b 3 0 a a 3 0 a a FD 4 a 2 a FD 5 a 3 b 4 0 a a 4 0 a a FD 5 a 2 a FD 6 3 b 5 0 a a 5 0 a a FD 6 2 a 6 0 a 0
-
result: Success time: 0.01s memory: 2732 kB returned value: 0
aaaaaaaa a*a
FD 0 a 0 a FD 0 a 2 a 1
-
result: Success time: 0.01s memory: 2732 kB returned value: 0
kaaapil kapil
FD 0 k 0 k FD 1 a 1 a FD 2 a 2 p 0
-
result: Success time: 0.01s memory: 2732 kB returned value: 0
kaaapil ka*pil
FD 0 k 0 k FD 1 a 1 a FD 1 a 3 p 1 1 a a FD 2 a 3 p 2 1 a a 2 1 a a FD 3 a 3 p 3 1 a a 3 1 a a FD 4 p 3 p FD 5 i 4 i FD 6 l 5 l 1



