[leetcode] Substring with Concatenation of All Words

来源:互联网 发布:js点击按钮删除div 编辑:程序博客网 时间:2024/05/21 00:19

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

思路:假设L中的单位长度为n,依次从S中取长度为n的子串,如果在L中,就记下来。需要借助hash或map,如果整个L都匹配完了,就算是一个concatenation;当匹配错误的时候,S右移一个位置。

参考链接:http://blog.csdn.net/ojshilu/article/details/22212703

代码:

class Solution {public:    vector<int> findSubstring(string S, vector<string> &L) {        vector<int> res;        int n=L[0].size();        int len=n*L.size();        if(len>S.size())             return res;                    map<string,int> m;        for(int i=0;i<L.size();i++)             m[L[i]]++;                    int idx=0;        map<string,int> tmp;        while(idx<=S.size()-len){            bool flag=true;            tmp.clear();            for(int i=idx;i<=idx+n*(L.size()-1);i+=n){                string now=S.substr(i,n);                if(m.find(now)==m.end()){                    flag=false;                    break;                }                tmp[now]++;                if(tmp[now]>m[now]){                    flag=false;                    break;                }            }            if(flag==true)                res.push_back(idx);            idx++;        }        return res;    }};


0 0
原创粉丝点击