- 浏览: 183402 次
- 性别:
- 来自: 济南
文章分类
最新评论
Implement wildcard pattern matching with support for '?' and '*'.
'?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false
这道题目属于动态规划的题目。题目很实际,就是linux系统下通配符的匹配问题,'?'只能代表一个字符,'*'可以代表任意长度字符,包括空字符。两个字符串匹配,属于二维的DP,用一个dp[][]来记录结果。首先我们初始化数组,当s为空时,我们从p的第一个字符开始,如果为’*‘, 当前状态就为true, 如果不为’*‘,则当前状态为false,并且后面的都为false,因为s为空,后面只要有一个字符,就为false;当s不为空,p为空时,这是全为false。接下来我们要找到递推式,当p中的字符为'*'时,它可以代表多个字符也可以代表空字符,当代表空字符时,dp[i][j] = dp[i][j - 1]; 当代表多个字符时 dp[i][j] = dp[i - 1][j]。因此当p的字符为'*'时 dp[i][j] = dp[i][j - 1] || dp[i - 1][j]。当p的字符不为'*'时,我们首先要比较当前两个字符是否相等 ,相等的情况有两种,一个是p的字符为'?', 或者两个是相同的字符;其次我们还要考虑上一个状态,这时的动态转移方程为
dp[i][j] = dp[i - 1][j - 1] && (p.charAt(j - 1) == '?' || p.charAt(j - 1) == s.charAt(i - 1))。有了递推式,代码就写出来了。
'?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false
这道题目属于动态规划的题目。题目很实际,就是linux系统下通配符的匹配问题,'?'只能代表一个字符,'*'可以代表任意长度字符,包括空字符。两个字符串匹配,属于二维的DP,用一个dp[][]来记录结果。首先我们初始化数组,当s为空时,我们从p的第一个字符开始,如果为’*‘, 当前状态就为true, 如果不为’*‘,则当前状态为false,并且后面的都为false,因为s为空,后面只要有一个字符,就为false;当s不为空,p为空时,这是全为false。接下来我们要找到递推式,当p中的字符为'*'时,它可以代表多个字符也可以代表空字符,当代表空字符时,dp[i][j] = dp[i][j - 1]; 当代表多个字符时 dp[i][j] = dp[i - 1][j]。因此当p的字符为'*'时 dp[i][j] = dp[i][j - 1] || dp[i - 1][j]。当p的字符不为'*'时,我们首先要比较当前两个字符是否相等 ,相等的情况有两种,一个是p的字符为'?', 或者两个是相同的字符;其次我们还要考虑上一个状态,这时的动态转移方程为
dp[i][j] = dp[i - 1][j - 1] && (p.charAt(j - 1) == '?' || p.charAt(j - 1) == s.charAt(i - 1))。有了递推式,代码就写出来了。
public class Solution { public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); boolean[][] dp = new boolean[m + 1][n + 1]; dp[0][0] = true; for(int i = 1; i <= n; i++) { if(p.charAt(i - 1) == '*') dp[0][i] = true; else break; } for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) { if(p.charAt(j - 1) != '*') { dp[i][j] = dp[i - 1][j - 1] && (p.charAt(j - 1) == '?' || p.charAt(j - 1) == s.charAt(i - 1)); } else { dp[i][j] = dp[i - 1][j] || dp[i][j - 1]; } } return dp[m][n]; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 497Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 429Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 580Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 929Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 672Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 842Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 782You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 704For a undirected graph with tre ...
相关推荐
Wildcard Matching Wildcard Matching O(N) by Jimbowhy http://blog.csdn.net/WinsenJiansbomber/article/details/50862569 在 LeetCode 上看到第二个有趣的问题,是关于字符串匹配的,在接触过正则表达式后就...
标题中的“Wildcard Matching Functions Library-开源”指的是一个专门用于处理字符串和通配符匹配的开源库。这个库可能包含了各种函数,旨在帮助开发者在不同平台上实现字符串与通配符模式的有效比较,例如“*”...
其中,通配符掩码(Wildcard Mask)是 ACL 中的一个重要概念。通配符掩码是指在 ACL 中使用的特殊符号,用于匹配网络地址。 通配符掩码的工作原理是将网络地址转换为二进制形式,然后根据通配符掩码的设置来匹配...
本话题将深入探讨“wildcard-string-matching”,即带有通配符的字符串匹配问题,主要以Java语言为实现背景。 通配符通常用于表示一个或多个字符,常见的通配符有星号(*)和问号(?)。在字符串匹配中,星号代表零...
以通配符命名 一个小巧易用的实用程序模块,用于使用JavaScript的已命名和/或未命名通配符来匹配字符串。 安装 $ npm install wildcard-named 用法 import wildcard from "wildcard-named" ; 基本例子 import ...
首先,让我们来看一下“Problem1: Wildcard Matching”。这个问题的核心是实现一个函数,它接受两个参数:一个字符串`s`和一个包含通配符`*`的模式`p`,并判断`s`是否能通过重新排列字符匹配`p`。通配符`*`在这里...
12. 字符串匹配问题:如Wildcard Matching(通配符匹配)、Flip Game(翻转游戏)等,这些题目要求熟悉字符串处理以及递归回溯等算法。 13. 字符串处理高级问题:如Scramble String(错乱字符串),验证字符串的...
例如,“Wildcard Matching”和“Valid Palindrome II”这类题目要求考虑通配符或特殊字符的存在,增加了问题的复杂性。在处理这类问题时,了解API的使用、忽略字符大小写和字符编码差异是十分重要的。 最后,树...
- Wildcard Matching(通配符匹配) - Length of Last Word(最后一个单词的长度) - Count and Say(猜数字序列) - **Integer Array**(整型数组操作) - Remove Element(移除元素) - Zero Sum Subarray...
它允许用户使用通配符来匹配和扩展文件路径,以简化文件和目录的操作。通过理解globbing,我们可以更高效地处理大量文件,而无需显式列出每个文件名。 在**Bash** shell中,globbing是一种内置功能,支持多种通配符...
与micromatch,minimatch和multimatch相似,但仅完整地支持Bash 4.3通配符(不支持exglob,posix括号或花括号) 请考虑关注该项目的作者 ,并考虑为该项目以显示您的 :red_heart_selector: 和支持。目录细节安装...
4. **模式匹配(Pattern Matching)**:使用通配符(如`*`)来匹配一组文件,例如`%.o: %.c`表示所有`.o`文件都依赖于同名的`.c`文件。 5. **隐含规则(Implicit Rule)**:Make内建了一些隐含规则,如默认的编译和...
- **通配符匹配(Wildcard Matching)**: 实现通配符‘*’和‘?’匹配。 #### 数组操作 - **查找字符串中的重复元素(Remove Duplicates)**: 从排序数组中删除重复项。 - **两数之和(2 Sum)**: 给定一个整数数组 nums ...
- Wildcard Matching: 实现支持'?'和'*'的通配符匹配。 - Jump Game / Jump Game II: 第一个问题要求判断是否能到达数组的最后一个位置,第二个问题要求求出最小跳跃次数到达最后一个位置。 - Permutations / ...
微匹配 javascript / node.js的全局匹配。 迷你匹配和多重匹配的替代品和更快的替代品。 请考虑关注该项目的作者 ,并考虑为该项目以显示您的 :red_heart_selector: 和支持。 目录 细节 安装 ...
5. **Wildcard Args**:使用`*args`和`**kwargs`通配符匹配任意数量的位置参数和关键字参数。 6. **Partial Matching**:Mox允许部分匹配参数,例如,你可以只关注参数的一部分,而不关心其他部分。 ## 示例代码 ...
用于匹配文件名时,有时称为“通配符”。安装npm install tiny-glob核心功能 :fire: 极快:比快〜350%,比 % :flexed_biceps: 强大:支持高级的globbing模式( ExtGlob ) :package: 微小的:只有〜45 LOC,具有2...