给定一个字符串 s 和一些长度相同的单词 words,找出 s 与 words 中所有单词(words 每个单词只出现一次)串联一起(words中组成串联串的单词的顺序随意)的字符串匹配的所有起始索引,子串要与串联串完全匹配,中间不能有其他字符。
举个例子,给定:
s:"barfoothefoobarman"
words:["foo", "bar"]
你应该返回的索引: [0,9]。(任意顺序)
详见:https://leetcode.com/problems/substring-with-concatenation-of-all-words/description/

Java实现:

class Solution {
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> res=new ArrayList<Integer>();
if(s.isEmpty()||s==null||words==null||words.length==0){
return res;
}
int n=words.length;
int m=words[0].length();
Map<String,Integer> m1=new HashMap<String,Integer>();
for(String str:words){
if(m1.containsKey(str)){
m1.put(str,m1.get(str)+1);
}else{
m1.put(str,1);
}
}
for(int i=0;i<=s.length()-n*m;++i){
Map<String,Integer> m2=new HashMap<String,Integer>();
int j=0;
for(;j<n;++j){
String t=s.substring(i+j*m,i+j*m+m);
if(!m1.containsKey(t)){
break;
}
if(m2.containsKey(t)){
m2.put(t,m2.get(t)+1);
}else{
m2.put(t,1);
}
if(m2.get(t)>m1.get(t)){
break;
}
}
if(j==n){
res.add(i);
}
}
return res;
}
}

参考:https://www.cnblogs.com/grandyang/p/4521224.html

https://blog.csdn.net/fly_yr/article/details/47957459

最新文章

  1. group_concat函数详解
  2. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
  3. 创建XMLHttpRequest对象方法
  4. codeforces A. Strange Addition 解题报告
  5. C# 验证IP是否正确简易方法 源代码
  6. 径向基函数(RBF)神经网络
  7. linux磁盘管理、新增磁盘、分区、挂载
  8. 尝试解决IIS问题一些方法
  9. Time_wait问题小结
  10. Windows API 之 FormatMessage
  11. [Android游戏开发]游戏框架的搭建
  12. iOracle实战笔记(第五天)
  13. MySQL查看和修改表的存储引擎
  14. 简易商品信息管理系统——首个Web项目
  15. C语言第一次博客作业 陈张鑫
  16. MinerQueue.java 访问队列
  17. 洛谷水题p1421小玉买文具题解
  18. ZOJ 2110 DFS
  19. Idea解决打开大文件消耗CPU问题
  20. SQL语言分类DQL,DML,DDL,DCL,DTL

热门文章

  1. orcal数据库得连接必须用localhost,url中不要用127.0.0.1,不然无法连接
  2. TModJS:template
  3. oracle--pl/sql变量定义----
  4. tomcat 自带jdk
  5. linux命令-vim一般模式下光标移动
  6. ubuntu 和 CentOS 安装docker
  7. mongodb教程国外
  8. hadoop作业调优参数整理及原理
  9. 使用form 组件写一个用户注册,并用 bootstrap渲染
  10. UITableViewCell 的复用机制