leetcode題庫——與所有單詞相關聯的字串
阿新 • • 發佈:2018-11-25
題目描述:
給定一個字串 s 和一些長度相同的單詞 words。在 s 中找出可以恰好串聯 words 中所有單詞的子串的起始位置。
注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。
示例 1:
輸入:
s = "barfoothefoobarman",
words = ["foo","bar"]
輸出: [0,9]
解釋: 從索引 0 和 9 開始的子串分別是 "barfoor" 和 "foobar" 。
輸出的順序不重要, [9,0] 也是有效答案。
示例 2:
輸入:
s = "wordgoodstudentgoodword",
words = ["word","student"]
輸出: []
方法:
class Solution { public: vector<int> res; int length; int flag=0; vector<int> findSubstring(string s, vector<string>& words) { if(s.size()==0||words.size()==0)return res; length=words.size(); vector<int> a(length,0); for(int i=0;i<length;i++)flag+=words[i].size(); for(int i=0;i<s.size()-flag+1;i++){ string str=s.substr(i,flag); if(check(words,a,str))res.push_back(i); } return res; } bool check(vector<string>& words,vector<int> a,string str){ int i=0; while(i<str.size()){ int k=0; for(int j=0;j<length;j++){ if(str.substr(i,words[j].size())==words[j]&&a[j]==0){ k=1; a[j]=1; i=i+words[j].size(); if(i==str.size())return true; break; } } if(k==0)return false; } } };
思路:
從給定字串中,依次用與words中字元總數相同長度的子串,與words進行比較。