http://yucoding.blogspot.com/2013/02/leetcode-question-123-wildcard-matching.html

几个例子:

(1)

acbdeabd

a*c*d

(2)

acbdeabdkadfa

a*c*dfa

Analysis:

For each element in s
If *s==*p or *p == ? which means this is a match, then goes to next element s++ p++.
If p=='*', this is also a match, but one or many chars may be available, so let us save this *'s position and the matched s position.
If not match, then we check if there is a * previously showed up,
       if there is no *,  return false;
       if there is an *,  we set current p to the next element of *, and set current s to the next saved s position.

e.g.

abed
?b*d**

a=?, go on, b=b, go on,
e=*, save * position star=3, save s position ss = 3, p++
e!=d,  check if there was a *, yes, ss++, s=ss; p=star+1
d=d, go on, meet the end.
check the rest element in p, if all are *, true, else false;

Note that in char array, the last is NOT NULL, to check the end, use  "*p"  or "*p=='\0'".

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
    bool isMatch(const char *s, const char *p) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
         
        const char* star=NULL;
        const char* ss=s;
        while (*s){
            if ((*p=='?')||(*p==*s)){s++;p++;continue;}
            if (*p=='*'){star=p++; ss=s;continue;}
            if (star){ p = star+1; s=++ss;continue;}
            return false;
        }
        while (*p=='*'){p++;}
        return !*p;
    }
};

最新文章

  1. 亚马逊S3下载上传文件
  2. 用SqlBulkCopy批量安插数据时提示来自数据源的 String 类型的给定值不能转换为指定目标列的类型 int
  3. Lo-Dash – 替代 Underscore 的优秀 JS 工具库
  4. Oracle Savepoint
  5. Linux命令之at
  6. remove all .git files and directories use one command
  7. C#_StringBuilder分离字符串实例
  8. Android 获取天气预报
  9. xcode5 ios7升级后的一系列问题解决
  10. [LeetCode]题解(python):153-Find Minimum in Rotated Sorted Array
  11. CodeForces 660D Number of Parallelograms
  12. 初识Google code jam平台
  13. 企业账号打包如何通过HTML页面打开
  14. Hadoop出现的错误及处理
  15. Active MQ 实战(一)
  16. 多进程log4cxx区分日志
  17. Codeforces Round 1153(div. 2)
  18. liunx mysql 备份
  19. python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为
  20. vue登录注册及token验证

热门文章

  1. oracle12c之二 控制PDB中SGA 与 PGA 内存使用
  2. vue-router学习
  3. [转]C#算法题
  4. sencha touch SortableList 的使用
  5. 使用spring遇到问题 事物不提交和更新失败
  6. Oracle 架构
  7. Firebird Fluentdata
  8. Quartz.Net定时任务简单实用(实例)
  9. Shiro登录校验
  10. EasyPusher推流类库的.NET调用说明