问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: :匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同) ?:匹配1个字符
注意:匹配时不区分大小写。
输入: 通配符表达式; 一组字符串。
输出: 返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false 数据范围:字符串长度:1\le s\le 100\1≤s≤100 进阶:时间复杂度:O(n^2)\O(n 2 ) ,空间复杂度:O(n)\O(n)
#include <iostream>
#include <vector>
using namespace std;
bool match(const char* pattern, const char* str) {
if (*pattern == '\0' && *str == '\0') return true;
if (*pattern == '\0' || *str == '\0') return false;
if (*pattern == '*') {
return match(pattern + 1, str) || match(pattern + 1, str + 1) || match(pattern, str + 1);
}
else if (*pattern == '?') {
return match(pattern + 1, str + 1);
}
else if (*pattern == *str) {
return match(pattern + 1, str + 1);
}
return false;
}
int main() {
string pattern, str;
while (cin >> pattern >> str) {
bool ret = match(pattern.c_str(), str.c_str());
if (ret) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
}
}
Nowcoder Link: https://www.nowcoder.com/questionTerminal/43072d50a6eb44d2a6c816a283b02036
|