栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指offer

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer

原题链接


文章目录
    • 思路
    • C++代码

思路

这个题主要是要充分考虑所有的可能情况,并且分析出每种情况递归的方式

情况一
a ab×

对于上面a ab×来讲:
第一个字符串结束后第二个字符串没有结束,但这仍然是符合的。因为×前的字符可以出现任意次(包括0次)当b出现0次与第一个字符串匹配了
但是如果第一个字符串没有结束,第二个字符串结束了,一定不符合要求。

情况二
a a.根据题意,这两个字符串不匹配
因为.可以表示任意字符,但是一定有字符,所以这种情况不匹配

情况三
“” “”
两个串为空串,此时算作匹配的情况


由上面的三种情况可知(原串设为str 正则表达式串设为pattern)

我们用两个指针来分别指向两个串的起点,当两个指针都指向对应的尾时说明匹配成功。由上面分析可知pattern为空str不为空时一定没有匹配成功。但是str为空pattern不为空时不能确定是否匹配成功,所以在下面的代码中要注意判断str是否为空

如果pattern出现×时×前的字符很重要
1.pattern中×前的字符与str字符相同时
①ab a×b
此时str指针+1,pattern指针+2跳过×。此时两个指针都指向字符b

②aab a×b
×前字符可以出现任意次,pattern中a要出现两次
str指针+1,pattern指针不动

③aa a×aa
这时×前的a要出现0次
str指针不动,pattern指针+2

这三种情况为或的关系,因为只要有一种模式匹配都叫匹配成功

2.pattern中×前的字符与str字符不相同时
①aa b×aa
str指针不动,pattern指针+2

C++代码
class Solution {
public:
    
    bool match(string str, string pattern) {
        // write code here
        return matchCore(str,pattern);
    }
    bool matchCore(const string&str,const string&pattern){
        if(str.empty()&& pattern.empty()){
            return true;//两串都为空,此时匹配成功
        }
        if(!str.empty()&&pattern.empty()){
            return false;//pattern为空但str不为空一定不成功
        }
//当pattern出现*字符*前的字符很重要
        if(pattern[1]=='*'){
            if(pattern[0]==str[0]||(pattern[0]=='.'&&!str.empty()))
            {  
//因为此时str可能为空要判断
//下面对应的为当*前字符相同时的三种情况              
                return matchCore(str,pattern.substr(2)) 
                || matchCore(str.substr(1),pattern)
                ||matchCore(str.substr(1),pattern.substr(2));
            }else
            {//对应的时pattern*前的字符与str不相同
                return matchCore(str,pattern.substr(2)); 
            }
        }//当pattern没有*时,看pattern的字符能否和str匹配即可或者此时pattern对应的字符为.因为.可以匹配任意字符
        if(str[0]==pattern[0]||(pattern[0]=='.'&&!str.empty()))
        {
            return matchCore(str.substr(1),pattern.substr(1));
        }
         return false; //这些情况都不符合是说明没有匹配                   
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290910.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号