[LintCode] 通配符查询

简介: 动态规划: 1 class Solution { 2 public: 3 /** 4 * @param s: A string 5 * @param p: A string includes "?" and "*" 6 * @ret...

动态规划:

 1 class Solution {
 2 public:
 3     /**
 4      * @param s: A string 
 5      * @param p: A string includes "?" and "*"
 6      * @return: A boolean
 7      */
 8     bool isMatch(const char *s, const char *p) {
 9         // write your code here
10         int m = strlen(s), n = strlen(p);
11         vector<bool> cur(m + 1, false);
12         cur[0] = true;
13         for (int j = 1; j <= n; j++) {
14             bool pre = cur[0];
15             cur[0] = cur[0] && p[j - 1] == '*';
16             for (int i = 1; i <= m; i++) {
17                 bool temp = cur[i];
18                 if (p[j - 1] != '*')
19                     cur[i] = pre && (s[i - 1] == p[j - 1] || p[j - 1] == '?');
20                 else cur[i] = cur[i - 1] || cur[i];
21                 pre = temp;
22             }
23         }
24         return cur[m];
25     }
26 };

贪心:

 1 class Solution {
 2 public:
 3     /**
 4      * @param s: A string 
 5      * @param p: A string includes "?" and "*"
 6      * @return: A boolean
 7      */
 8     bool isMatch(const char *s, const char *p) {
 9         // write your code here
10         const char* asterisk = NULL;
11         const char* match = NULL;
12         while (*s) {
13             if (*p == '*') {
14                 asterisk = p++;
15                 match = s;
16             }
17             else if (*s == *p || *p == '?') {
18                 s++;
19                 p++;
20             }
21             else if (asterisk) {
22                 s = ++match;
23                 p = asterisk + 1;
24             }
25             else return false;
26         }
27         while (*p == '*') p++;
28         return !*p;
29     }
30 };

 

目录
相关文章
|
8月前
|
关系型数据库 MySQL
Mysql基础第十一天,用通配符进行过滤
Mysql基础第十一天,用通配符进行过滤
51 0
Mysql基础第十一天,用通配符进行过滤
通配符?,*,**区别
通配符?,*,**区别
164 0
牛客网 字符串通配符
牛客网 字符串通配符
146 0
牛客网 字符串通配符
LeetCode 791. 自定义字符串排序
字符串S和 T 只包含小写字符。在S中,所有字符只会出现一次。
86 0
html+css实战50-通配符
html+css实战50-通配符
250 0
html+css实战50-通配符
|
存储 Java 编译器
Java数据结构基础——泛型、通配符
Java数据结构基础——泛型、通配符
|
存储 算法
☆打卡算法☆LeetCode 44、通配符匹配 算法解析
“给定一个字符串和一个字符模式,实现一个通配符匹配。”
|
算法
通配符匹配你了解吗
分析通配符的实现原理
358 0
|
人工智能 Linux 开发者
文件通配符 | 学习笔记
快速学习文件通配符。
284 0