30. Substring with Concatenation of All Words, leetcode

来源:互联网 发布:大陆网络男歌手 编辑:程序博客网 时间:2024/05/07 12:21

题目:

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

思路及代码:

这题涉及search,用hash表数据结构比较快,扫描s,逐个去跟words里的单词匹配,若匹配当前下表i就是一个可行的结果

class Solution {public:    vector<int> findSubstring(string s, vector<string>& words) {        unordered_map<string, int> word;        for(string s : words) word[s]++;        vector<int> ans;        int n = s.size(), m = words[0].size(), k = words.size();        for(int i = 0; i < n - m * k + 1; i++)        {            unordered_map<string, int> seen;            int j = 0;//这里写在外面方便 检验if(j == k * m)            for(; j < m * k; j+=m)            {                string jword = s.substr(i + j, m);//i + j not j                if(word.count(jword)){                    seen[jword]++;//直接++                    if(seen[jword] > word[jword])                    break;                }                else break;            }            if(j == k * m)            ans.push_back(i);        }        return ans;    }};


0 0
原创粉丝点击