福田商城网站制作,新开传奇网站发布站手游,WordPress实现点击加载评论,四川住房和城乡建设网站题目描述 请实现一个函数用来匹配包括’.‘和*的正则表达式。模式中的字符’.表示任意一个字符#xff0c;而*表示它前面的字符可以出现任意次#xff08;包含0次#xff09;。 在本题中#xff0c;匹配是指字符串的所有字符匹配整个模式。例如#xff0c;字符串aaa…题目描述 请实现一个函数用来匹配包括’.‘和*的正则表达式。模式中的字符’.表示任意一个字符而*表示它前面的字符可以出现任意次包含0次。 在本题中匹配是指字符串的所有字符匹配整个模式。例如字符串aaa与模式a.a和abaca匹配但是与aa.a和ab*a均不匹配 解题思路
就是分两种情况看表达式的下一个字符是不是*
pattern下一个字符不为‘*’这种情况比较简单直接匹配当前字符。如果 匹配成功继续匹配下一个如果匹配失败直接返回false。注意这里的 “匹配成功”除了两个字符相同的情况外还有一种情况就是pattern的 当前字符为‘.’,同时str的当前字符不为‘\0’。pattern下一个字符为‘*’时稍微复杂一些因为‘*’可以代表0个或多个。 这里把这些情况都考虑到 当‘*’匹配0个字符时str当前字符不变pattern当前字符后移两位 跳过这个‘*’符号当‘*’匹配1个或多个时str当前字符移向下一个pattern当前字符 不变。这里匹配1个或多个可以看成一种情况因为当匹配一个时 由于str移到了下一个字符而pattern字符不变就回到了上边的情况a 当匹配多于一个字符时相当于从str的下一个字符继续开始匹配
代码实现
class Solution {
public:bool match(char* str, char* pattern){if(*str \0 *pattern \0)return true;if(*str ! \0 *pattern \0)return false;//如果表达式的下一个字符不是*//正常处理//判断当前是否相等或者只要表达式为.并且匹配的字符串不为空//然后返回str,pattern1判断下一个if(*(pattern1) ! *){if(*str *pattern || *str ! \0 *pattern .)return match(str1,pattern1);elsereturn false;}//否则下一个字符为*else{if(*str *pattern || *str! \0 *pattern .)return match(str,pattern2)|| match(str1,pattern);elsereturn match(str,pattern2);}}
};