Substring with Concatenation of All Words

来源:互联网 发布:java 创建控制台程序 编辑:程序博客网 时间:2024/05/17 02:57

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 matter).

Tag:使用了Map,将L中的Word存入Map中;对于S进行线性搜索。

vector<int> findSubstring(string S, vector<string> &L){vector<int> result;map<string, int> word_map;int sl = S.size();int N = L.size();if(N == 0 || sl == 0) return result;int wl = L[0].size();for(int i = 0; i < N; i++){if(word_map.find(L[i]) == word_map.end())word_map[L[i]] = 1;elseword_map[L[i]] = word_map[L[i]] + 1;}for(int i = 0; i <= sl - N * wl; i++){map<string, int> word_map_tmp(word_map);bool flag = true;for(int j = 0; j < N; j++){string tmp = S.substr(i + j * wl, wl);//cout<<tmp<<endl;if(word_map_tmp.find(tmp) != word_map_tmp.end() && word_map_tmp[tmp] > 0)word_map_tmp[tmp] = word_map_tmp[tmp] - 1;else{flag = false;break;}}if(flag) result.push_back(i);}return result;}


0 0
原创粉丝点击