154. 正規表示式匹配
實現支援'.'和'*'的正規表示式匹配。
'.'匹配任意乙個字母。
'*'匹配零個或者多個前面的元素。
匹配應該覆蓋整個輸入字串,而不僅僅是一部分。
需要實現的函式是:bool ismatch(string s, string p)
ismatch("aa","a") → false
ismatch("aa","aa") → true
ismatch("aaa","aa") → false
ismatch("aa", "a*") → true
ismatch("aa", ".*") → true
ismatch("ab", ".*") → true
ismatch("aab", "c*a*b") → true
樣例樣例 1:
輸入:"aa","a"
輸出:false
解釋:無法匹配
樣例 2:
輸入:"aa","a*"
輸出:true
解釋:'*' 可以重複 a
bool ismatch(string &s, string &p)
else if (j+2 < dstlen && p[j] == '.' && p[j + 1] == '*' && srclen == 2 && dstlen > 2 && p[j + 2] != '*')
else if (p[j] == '.' && p[j + 1] == '*')
i++;
j = j + 2;
}else if(s[i] != s[i + 1] && s[i] != p[j+2])
else
}else if (p[j] == '.')
else if (s[i] != p[j] && j+1 < dstlen && p[j + 1] == '*')
else if (j == dstlen - 1 && i != srclen - 1 && p[j ] != '*')
else if (j != dstlen - 1 && i == srclen - 1)
if (p[j] == s[i])}}
else if (s[i] == p[j])
else if (j == dstlen - 1 && i == srclen - 1 && s[i] != p[j] && p[j] != '*' && p[j] != '.')
else if (i == srclen)}}
}else if (p[j] == '*')
i++;
j++;
}else if (j + 1 < dstlen) //把 * 前面當作 0 個
else if (p[j + 1] != s[i - 1])
else
}else
}if (j < dstlen - 1)
return true;
}void test(){/*
string s = "aaaab";
string p="a*a*a*a*c";*/
//string s = "aa";
//string p = "a*";
//string s = "bbabacccbcbbcaaab";
//string p = "a*b*a*a*c*aa*c*bc*";
/*string s = "ab";
string p = ".*c";
*///string s = "bbbba";
//string p = ".*a*a";
//string s = "acaabbaccbbacaabbbb";
//string p = "a*.*b*.*a*aa*a*";
string s = "aasdfasdfasdfasdfas";
string p = "aasdf.*asdf.*asdf.*asdf.*s";
bool ret = ismatch(s, p);
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...