题解 | #字符串匹配#

字符串匹配

http://www.nowcoder.com/practice/fbdc522ef958455687654b38a4ca01e0

#include<iostream>
#include<vector>
using namespace std;
void trans(string &str) {
    //全部转换为小写
    for (int i = 0; i < str.size(); ++i)
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = str[i] - 'A' + 'a';
}
int main()
{
    std::ios::sync_with_stdio(false);
    string str, patern;
    int n;
    vector<string> vec;
    cin >> n;
    while (n--) {
        cin >> str;
        vec.push_back(str);
    }
    cin >> patern;
    trans(patern);
    for (int i = 0; i < vec.size(); ++i) {
        str = vec[i];
        trans(str);
        int a = 0, b = 0;
        while (a < str.size() && b < patern.size()) {
            if (str[a] == patern[b]) {
                a++;
                b++;
            }
            else if (patern[b] == '[') {
                int pos = patern.find(str[a],b);
                if (pos != string::npos) {
                    b = patern.find(']', pos) + 1;
                    a++;
                }
                else
                    break;
            }
            else
                break;
        }
        if (a == str.size() && b == patern.size())
            cout << i + 1 << " " << vec[i] << endl;
    }
}
全部评论
这是找字符串相等的代码吧 字符串匹配不应该是找包含关系吗
点赞 回复 分享
发布于 2022-03-17 23:36
啥意思?就题论题,你自己提交看看结果。
点赞 回复 分享
发布于 2022-03-18 09:02
emmm...代码是能通过没毛病,但看看系统提供的用例,所有主串和模式串的长度是相等的(也就是我上面所说的找字符串相等,在我理解中是字符串匹配的一种特殊情况),也就是这代码当主串长度比模式串长度大的时候(字符串匹配的一般情况),这代码就不大适合了。--仅个人见解
点赞 回复 分享
发布于 2022-03-18 12:13

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务