1. 题目说明
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
注意:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
输入:s = "adceb"p = "*a*b"输出: true输入:s = "acdcb"p = "a*c?b"输出: false
2. 解题
<?php
class Solution {
/**
* @param String $s
* @param String $p
* @return Boolean
*/
public function isMatch($s, $p) {
$star = -1;
$i_index = 0;
$j = $i = 0;
while($i < strlen($s)) {
if ($j < strlen($p) && ($s[$i] == $p[$j] || $p[$j] == '?')) {
$i++;
$j++;
} elseif ($j < strlen($p) && $p[$j] == '*') {
$star = $j;
$i_index = $i;
$j++;
} elseif ($star != -1) {
$j = $star + 1;
$i = ++$i_index;
} else {
return false;
}
}
do {
$j++;
} while ($j < strlen($p) && $p[$j] == '*');
return $j == strlen($p);
}
}
$s = "acdcb";
$p = "a*c?b***";
$cls = new Solution();
$r = $cls->isMatch($s, $p);
var_dump($r);
