LeetCode | Substring with Concatenation of All Words(链接所有单词的子串)
2014-08-17 20:54
351 查看
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:
L:
You should return the indices:
(order does not matter).
题目解析:
这道题纠结了好久……由于对c++不熟悉,一直想用c来实现,结果就太麻烦了,不知道哪位大神用c成功实现,忘分享……
用c++的map就相当容易了,先将L中的字符串在map中建立映射。然后S从前往后一次以某一个为起始字符判断长度为l_size*word_size的连续字符串是否都在map中。当然为了防止L中有重复的字符串出现,另设一个counting,来记录子串的个数,当个数超过word_count[word]的时候,也退出,遍历S中的下一个字符。
characters.
For example, given:
S:
"barfoothefoobarman"
L:
["foo", "bar"]
You should return the indices:
[0,9].
(order does not matter).
题目解析:
这道题纠结了好久……由于对c++不熟悉,一直想用c来实现,结果就太麻烦了,不知道哪位大神用c成功实现,忘分享……
用c++的map就相当容易了,先将L中的字符串在map中建立映射。然后S从前往后一次以某一个为起始字符判断长度为l_size*word_size的连续字符串是否都在map中。当然为了防止L中有重复的字符串出现,另设一个counting,来记录子串的个数,当个数超过word_count[word]的时候,也退出,遍历S中的下一个字符。
class Solution { public: vector<int> findSubstring(string S, vector<string> &L) { int l_size = L.size(); vector<int> res; if(l_size <= 0) return res; map<string,int> word_count; //记录L字符串中每一个元素出现的个数 int word_size = L[0].size(); for(int i = 0;i < l_size;i++) ++word_count[L[i]]; map<string,int> counting; //记录查找过程中的个数 for(int i = 0;i <= (int)S.size()-l_size*word_size;i++){ counting.clear(); int j; for(j = 0;j < l_size;j++){ string word = S.substr(i+j*word_size,word_size); if(word_count.find(word) != word_count.end()){ ++counting[word]; if(counting[word] > word_count[word]) break; }else break; } if(j == l_size) res.push_back(i); } return res; } };
相关文章推荐
- [LeetCode] 30. Substring with Concatenation of All Words 串联所有单词的子串
- [Leetcode] Substring with concatenation of all words 串联所有单词的子串
- 【LeetCode-面试算法经典-Java实现】【030-Substring with Concatenation of All Words(串联所有单词的子串)】
- LeetCode--Substring with Concatenation of All Words 串联所有单词的子串
- [LeetCode] Substring with Concatenation of All Words 串联所有单词的子串
- (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
- LeetCode OJ 之 Substring with Concatenation of All Words(有所有单词组合的子串)
- leetCode 30.Substring with Concatenation of All Words (words中所有子串相连) 解题思路和方法
- LeetCode 30 Substring with Concatenation of All Words(与所有文字串联子串)(*)
- LeetCode 30 Substring with Concatenation of All Words(确定包含所有子串的起始下标)
- LeetCode|Substring with Concatenation of All Words(所有单词的串联的子字符串)
- Substring with Concatenation of All Words字符串中找到包含所有单词的子串
- LeetCode 30. Substring with Concatenation of All Words(所有单词的连接)
- leetCode 30.Substring with Concatenation of All Words (words中全部子串相连) 解题思路和方法
- [理解leetcode解法]30. Substring with Concatenation of All Words找子串
- LeetCode 30. Substring with Concatenation of All Words(单词连接)
- Substring with Concatenation of All Words 滑动窗口方法 串联所有单词
- LeetCode----30. Substring with Concatenation of All Words(串联所有的words)
- [LeetCode] Substring with Concatenation of All Words
- LeetCode-Substring with Concatenation of All Words