15.7—细节实现题—Substring with Concatenation of All Words

来源:互联网 发布:知乎 收入 安排 编辑:程序博客网 时间:2024/06/10 14:40
描述
You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices
of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening
characters.
For example, given:
S: "barfoothefoobarman"
L: ["foo", "bar"]
You should return the indices: [0,9].(order does not maer).



#include<iostream>#include<string>#include<vector>#include<map>using namespace std;vector<int> SubstringwithofAllWords(string str, map<string,int> ht){if (ht.size() < 1)return vector < int > {-1};int maplen = ht.size();map<string, int>ht_copy = ht;map<string, int>::iterator it = ht.begin();int len2 = (it->first).size();int len1 = str.size();vector<int> res;for (int i = 0; i < len1 - len2+1 ;){string tmp = str.substr(i, len2);it = ht.find(tmp);if (it != ht.end()){ht.erase(tmp);i = i + len2;if (ht.empty()){res.push_back(i - maplen*len2);ht = ht_copy;}}else{i++;ht = ht_copy;}}return res;}int main(){string str = "barfoomanfoobarman";map<string, int> ht;ht["foo"] = 1;ht["bar"] = 1;ht["man"] = 1;vector<int> res = SubstringwithofAllWords(str, ht);for (int i = 0; i < res.size(); i++)cout << res[i] << " ";cout << endl;}

原创粉丝点击