[LintCode] 通配符查询

动态规划:

 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 };
时间: 2024-12-20 14:33:30

[LintCode] 通配符查询的相关文章

Android SQLite 通配符查询找不到参数问题

使用Android SQLite中SQLiteDatabase类的query方法查询时,如果where中包含通配符,则参数会无法设置,如类似下面的方法查询时 1 SQLiteDatabase db = dbHelper.getReadableDatabase(); 2 cursor = db.query(null, "name like '%?'", new String[] { name }, null, null, null, null); 将会抛出下面的异常 android.da

倒排表数据结构、通配符查询、拼写纠正详解

目录: Dictionary Data Structure  词典数据结构 Wild-Card Query  通配符查询 Spelling Correction  拼写纠正 搜索引擎里的dictionary data通常存储着这些信息: 索引词(term vocabulary). 文档频率(document frequency,即这个词在多少个文档里出现). 指向倒排表的指针(pointers to each postings list ). 那么,他是怎样的一个数据结构呢? 一种非常naive

[Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询

通配符和正则表达式查询 wildcard查询和prefix查询类似,也是一个基于词条的低级别查询.但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix).它使用标准的shell通配符:?用来匹配任意字符,*用来匹配零个或者多个字符. 以下查询能够匹配包含W1F 7HW和W2F 8HW的文档: GET /my_index/address/_search { "query": { "wildcard": { "postcode"

Elasticsearch 常用基本查询

安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文档进行搜索:title(标题),authors(作者),summary(摘要),release date(发布时间)以及number of reviews(评论数量),首先,让我们创建一个新的索引,并通过bulk API查询文档: 为了展示Elasticsearch中不同查询的用法,首先在Elast

es的基本查询api的使用

本文主要记录es的基本查询api的使用 基本查询种类 term查询 { "query": { "term": { "title": "crime" } } } 指定权重 { "query": { "term": { "title": { "value":"crime", "boost":10.0 } } }

lucene 查询的使用

各种查询 方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser 查询字符串 ------------------------> Query对象 例如: 上海 AND 天气 上海 OR 天气 上海新闻 AND site:news.163.com ... 方式二: 直接创建Query的实例(子类的),不会使用分词器 new TermQuery(..); new BooleanQuery(..); 1 package cn.itcast.i_que

elasticsearch基本操作之--使用QueryBuilders进行查询

/** * 系统环境: vm12 下的centos 7.2 * 当前安装版本: elasticsearch-2.4.0.tar.gz */ QueryBuilder 是es中提供的一个查询接口, 可以对其进行参数设置来进行查用擦还训 package com.wenbronk.javaes; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Iterator; import java.ut

lucene查询解析器语法

Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用Query Parser提供的强大的查询语法解析来构造你想要的查询器.本文章详细的介绍了Lucene的查询语法.通过Java语法分析器把一个查询字符串解析成 Lucene的查询器.在你选择使用Query Parser前,请考虑以下事项: 如果你打算在程序中拼接查询语法串然后再利用Query Parser转换,那么强烈建议你利用相应的API来自己构造查询器.也就是说,Query Parser是为手工输入高级查询设计的,而不是为

ElasticSearch 常用的查询过滤语句

query 和  filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html    Filter DSL   term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型): { "term": { "age":    26           }} { "term": { "date":   &