Leetcode题:Substring with Concatenation of All Words
来源:互联网 发布:高频交易软件系统 编辑:程序博客网 时间:2024/06/05 23:48
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右移一个位置。
想法二:事先把L的所有concatenation组合出来,放到hash或map里,然后遍历S的时候直接看。
下面的代码是实现的第一种想法,第二种想法当L中数据较多时由于组合数会剧增,效率较低。
class Solution {public: vector<int> findSubstring(string S, vector<string> &L) { vector<int> result; int n = L[0].size(); int len = n * L.size(); if(len > S.size()) return result; 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) result.push_back(idx); idx++; } return result; }};
0 0
- LeetCode: Substring with Concatenation of All Words
- LeetCode : Substring with Concatenation of All Words
- [Leetcode] Substring with Concatenation of All Words
- [LeetCode]Substring with Concatenation of All Words
- LeetCode-Substring with Concatenation of All Words
- [LeetCode] Substring with Concatenation of All Words
- LeetCode:Substring with Concatenation of All Words
- Leetcode: Substring with Concatenation of All Words
- [LeetCode] Substring with Concatenation of All Words
- leetcode Substring with Concatenation of All Words
- leetcode Substring with Concatenation of All Words
- LeetCode Substring with Concatenation of All Words
- LeetCode | Substring with Concatenation of All Words
- LeetCode - Substring with Concatenation of All Words
- Substring with Concatenation of All Words -- LeetCode
- Leetcode: Substring with Concatenation of All Words
- leetcode:Substring with Concatenation of All Words
- LeetCode|Substring with Concatenation of All Words
- 【wikioi】1014装箱问题题解(01背包标准)
- synchronized 关键字 加深理解
- python GUI编程
- Java CLass Member
- 文件或目录损坏且无法读取
- Leetcode题:Substring with Concatenation of All Words
- getrequestdispatcher() 与 sendredirect()的区别
- linux中强大且常用命令:find、xargs、grep
- 你的梦想是什么?
- 粤公布2013反贪精品案例 局长强奸下属牵出24人犯罪案
- MySQL5.6安装步骤(windows7 64位)
- C++复习之无符号整数类型的回绕
- System类详解
- Android开发之进度条使用