【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;
否则会超时
相关文章推荐
- nagios搭建
- OpenStack与监控系统
- nginx开启gzip
- csharp:百度翻译
- 创业必备工具
- 4.0读取文件的报 open failed: ENOENT (No such file or directory)
- 小知识~LocalDB在IIS上如何成功配置
- iOS开发日记48-详解UIPickerView
- 青岛往事
- 织梦按栏目id读取banner图
- java 遍历一个list的时候 然后修改 会报错
- 通过force index了解的MySQL查询的性能优化
- 从iOS toy app中学到的东西
- Eclipse Kepler中安装Drools6插件
- 实用链接
- java内存调优
- Rabbitmq集群高可用测试
- JavaScript中的标签语句
- Java 下一代: 对比并发性
- Redis之七种武器