1. 程式人生 > 實用技巧 >92 駝峰式匹配(1023)

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;
}