Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- bool isMatch( const string &text, const string &pattern, int textStart = 0, int patternStart = 0)
- {
- if(textStart >= text.size()){
- if(patternStart >= pattern.size()){
- return true;
- }else if(patternStart+1 < pattern.size() && pattern[patternStart+1] == '*'){
- //i.e text is empty and it's a kleene closure...
- return isMatch(text, pattern, textStart+1, patternStart+2);
- }else{
- return false;
- }
- }
- bool current_check = false;
- if(patternStart+1 < pattern.size() && pattern[patternStart+1] == '*'){
- //it's a kleene closure...
- //skip
- bool f = isMatch(text, pattern, textStart, patternStart+2);
- bool s = false, t = false;
- if(pattern[patternStart] != '.' && pattern[patternStart] == text[textStart]){
- s = isMatch(text, pattern, textStart+1, patternStart);
- }else if(pattern[patternStart] == '.'){
- t = isMatch(text, pattern, textStart+1, patternStart);
- }
- return f || s || t;
- }else{
- if(pattern[patternStart] != '.' && pattern[patternStart] == text[textStart]){
- current_check = true;
- return current_check && isMatch(text, pattern, textStart+1, patternStart+1);
- }else if(pattern[patternStart] == '.'){
- current_check = true;
- return current_check && isMatch(text, pattern, textStart+1, patternStart+1);
- }else{
- current_check = false;
- return false;
- }
- }
- }
- // (ab)2(a(cd)3)2
- // ababacdcdcdacdcdcd
- int main() {
- return 0;
- }
- /*
- if(textStart == text.size()){
- if(patternStart == pattern.size()){
- return true;
- }else if(patternStart+1 < pattern.size() && pattern[patternStart+1] == '*'){
- return isMatch(text, pattern, textStart, patternStart+2);
- }else{
- return false;
- }
- }
- if(patternStart == pattern.size()){
- return false;
- }
- bool answer = false;
- if(patternStart+1 < pattern.size() && pattern[patternStart+1] == '*'){
- //i.e it kleene closure.
- if(pattern[patternStart] == '.' || pattern[patternStart] == text[textStart]){
- answer |= isMatch(text, pattern, textStart+1, patternStart);
- }
- answer |= isMatch(text, pattern, textStart, patternStart+2);
- }else if(text[textStart] == pattern[patternStart] || pattern[patternStart] == '.'){
- //it is not a kleene closure...
- answer |= isMatch(text, pattern, textStart+1, patternStart+1);
- }
- return answer;
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement