您的位置:首页 > 其它

【Leetcode】之Substring with Concatenation of All Words

2015-11-26 11:40 411 查看

一.问题描述

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

二.我的解题思路

对字符串s进行遍历,s中每一个字符都有可能是符合条件的子串的开始。建立hash表来减小时间复杂度。测试通过的程序如下:

class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
int word_num=words.size();
int word_len = words[0].length();
int len = s.length();
map<string,int> src_hash_map;

vector<int> res;int flag=0;
//generate src_hash_map
for(int i=0;i<word_num;i++){

src_hash_map[words[i]]++;
}

for(int i=0;i<len;i++){
map<string,int> tmp_map;
for(int j=0;j<word_num;j++){

string curr("");
for(int k=0;k<word_len;k++){
if(i+j*word_len+k>=len)
return res;
curr += s[i+j*word_len+k];
}
if(src_hash_map[curr]<1)
break;
else
tmp_map[curr]++;

}

for(int k=0;k<word_num;k++){
if(src_hash_map[words[k]]!=tmp_map[words[k]]){
flag=1;
break;
}
}
if(flag==1)
flag=0;
else
res.push_back(i);

}
return res;

}
};


注意需要对边界条件进行判断:

if(i+j*word_len+k>=len)

return res;

否则会超时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: