3407. 子字符串匹配模式
给你一个字符串 s
和一个模式字符串 p
,其中 p
恰好 包含 一个 '*'
符号。
p
中的 '*'
符号可以被替换为零个或多个字符组成的任意字符序列。
如果 p
可以变成 s
的 子字符串,那么返回 true
,否则返回 false
。
示例 1:
输入:s = "leetcode", p = "ee*e"
输出:true
解释:
将 '*'
替换为 "tcod"
,子字符串 "eetcode"
匹配模式串。
示例 2:
输入:s = "car", p = "c*v"
输出:false
解释:
不存在匹配模式串的子字符串。
示例 3:
输入:s = "luck", p = "u*"
输出:true
解释:
子字符串 "u"
,"uc"
和 "uck"
都匹配模式串。
提示:
1 <= s.length <= 50
1 <= p.length <= 50
s
只包含小写英文字母。p
只包含小写英文字母和一个'*'
符号。
思路
分别判断首
*
字符,单独判断中*
优化
代码
分别判断首
*
字符,单独判断中*
class Solution {
public boolean hasMatch(String s, String p) {
if (p.charAt(0) == '*') {
return s.contains(p.substring(1));
}
if (p.charAt(p.length() - 1) == '*') {
return s.contains(p.substring(0, p.length() - 1));
}
String[] split = p.split("\\*");
if (!s.contains(split[0])) {
return false;
}
return s.indexOf(split[0]) <= s.lastIndexOf(split[1]) - split[0].length();
}
}
优化
class Solution {
public boolean hasMatch(String s, String p) {
int len = p.length();
if (p.charAt(0) == '*') {
String suffix = p.substring(1);
return s.indexOf(suffix) != -1;
}
if (p.charAt(len - 1) == '*') {
String prefix = p.substring(0, len - 1);
return s.indexOf(prefix) != -1;
}
int starIndex = p.indexOf('*');
String prefix = p.substring(0, starIndex);
String suffix = p.substring(starIndex + 1);
int prefixPos = s.indexOf(prefix);
int suffixPos = s.lastIndexOf(suffix);
return prefixPos != -1 && suffixPos != -1 && prefixPos <= suffixPos - prefix.length();
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 孤寂灬无痕
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果