leetcode 30. Substring with Concatenation of All Words

来源:互联网 发布:plc与单片机的区别 编辑:程序博客网 时间:2024/06/04 17:40

You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.

For example, given:
s"barfoothefoobarman"
words["foo", "bar"]

You should return the indices: [0,9].
(order does not matter).



class Solution {public:vector<int> findSubstring(string s, vector<string>& words) {vector<int>re;if (words.empty())return re;int wl = words[0].length();map<string, int>count;for (int i = 0; i < words.size(); i++)count[words[i]]++;int k = 0;while (true){map<string, int>cnt = count;while (k < s.length() - wl*words.size() + 1 && cnt.find(string(s.begin() + k, s.begin() + k + wl)) == cnt.end())k++;if (k == s.length() - wl*words.size() + 1)return re;int kk = k;while ( !cnt.empty() && cnt.find(string(s.begin() + kk,s.begin() + kk + wl)) != cnt.end()){cnt[string(s.begin() + kk, s.begin() + kk + wl)]--; if (cnt[string(s.begin() + kk, s.begin() + kk + wl)] == 0)cnt.erase(cnt.find(string(s.begin() + kk, s.begin() + kk + wl)));kk += wl;}if (cnt.empty())re.push_back(k);k++;}return re;}};

accepted


0 0
原创粉丝点击