92 駝峰式匹配(1023)
作者:
晚於: 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; }