92 驼峰式匹配(1023)

作者: Turbo时间限制: 1S章节: 其它

晚于: 2020-09-09 12:00:00后提交分数乘系数50%

问题描述 :

如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)

给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。

示例 1:

输入:pattern = "FB",queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"]

输出:[true,false,true,true,false]

解释:

"FooBar" 可以这样生成:"F" + "oo" + "B" + "ar"。

"FootBall" 可以这样生成:"F" + "oot" + "B" + "all".

"FrameBuffer" 可以这样生成:"F" + "rame" + "B" + "uffer".

示例 2:

输入:pattern = "FoBa",queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"]

输出:[true,false,true,false,false]

解释:

"FooBar" 可以这样生成:"Fo" + "o" + "Ba" + "r".

"FootBall" 可以这样生成:"Fo" + "ot" + "Ba" + "ll".

示例 3:

输出:pattern = "FoBaT",queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"]

输入:[false,true,false,false,false]

解释: 

"FooBarTest" 可以这样生成:"Fo" + "o" + "Ba" + "r" + "T" + "est"

输入说明 :

首先输入字符串pattern,长度<=100。

然后输入待查询列表 queries的长度n,n<=10。

最后输入n个字符串,为queries中的待查询项,每项的长度<=100。

所有字符串都仅由大写和小写英文字母组成。

输出说明 :

输出answer列表,每个answer[i] 为true或false,answer[i] 之间以空格分隔,最前和最后无空格。

输入范例 :

输出范例 :

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//设置双指针i[p]==pattern[q] 说明符合继续王后移动
//i[p]!=pattern[q] ,并且i[p]是大写,说明不匹配
// i[p]!=pattern[q] ,并且i[p]是小写,p++继续判断 
class Solution {
public:
    vector<bool> camelMatch(vector<string>& queries, string pattern) 
    {
        vector<bool> res;
        for(auto i:queries)
        {
            int p=0,q=0,flag=0;
            while(p<i.size())
            {
                if(i[p]==pattern[q])
                {
                    p++;q++;
                }
                else if(isupper(i[p]))
                {
                    flag=1;
                    break;
                }
                else
                    p++;
            }
            if(flag||q<pattern.size())//flag=1或者pattern还没被匹配完,都是错误的 
                res.push_back(false);
            else
                res.push_back(true);
        }
    return res;
    }
};
int main()
{
    string s,str;
    vector<string> words;
    int n;
    cin>>s;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>str;
        words.push_back(str);
    }
    vector<bool> res=Solution().camelMatch(words,s);
    for(int i=0; i<res.size(); i++)
    {
        if (i> 0)
            cout<<" ";
        if(res[i])
            cout<<"true";
        else
            cout<<"false";
    }

    return 0;
}
原文地址:https://www.cnblogs.com/zmmm/p/13675482.html