CF1023A

发布时间 2023-11-15 19:38:28作者: To_Carpe_Diem

题目传送门

题目主要内容

题目要求判断给定两个字符串 \(s\)\(t\) 是否匹配。字符串 \(s\) 可以包含一个通配符,它可以表示任意长度的字符序列。如果可以通过替换 \(s\) 中的通配符来得到字符串 \(t\),则表示匹配。

主要知识:

字符串处理:包括字符串的比较截取查找等操作。

字符串匹配:根据题目要求进行字符串匹配,判断两个字符串是否相等或部分匹配

这道题目主要涉及到了字符串的匹配和处理,以及一些相关的字符串操作函数。通过观察字符串中的通配符和使用字符串匹配的方式,可以判断给定的字符串是否匹配

AC Code:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    string s, t;
    cin >> s >> t;
    if (s == t) {
        cout << "YES" << endl;
    } else if (s.find('*') != string::npos) {
        int wildcard_pos = s.find('*');
        string s_prefix = s.substr(0, wildcard_pos);
        string s_suffix = s.substr(wildcard_pos+1);
        if (t.length() >= s.length()-1 && t.substr(0, s_prefix.length()) == s_prefix && t.substr(t.length()-s_suffix.length()) == s_suffix) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    } else {
        cout << "NO" << endl;
    }
    return 0;
}