博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 30 Substring with Concatenation of All Words--In Java
阅读量:4093 次
发布时间:2019-05-25

本文共 901 字,大约阅读时间需要 3 分钟。

主要想法为:

建立一个hashmap<String ,int>保存所有words中的单词,记录下它们各自出现的次数。然后外层循环从文本串中依次取下长度等于words中单词拼接后长度的子串,程序中为变量ps。内层循环从ps中每次截取一个单词,这时我们拷贝一份先前的hashmap,这个单词出现一次,就在hashmap的指定键值处减一,如果发生有一个值被减到小于0,则是一次失败的匹配,内层循环退出。同时,如果根本没有找到这个从ps里截到的单词,同样查找失败,内层循环退出。

当然到这里还是不够的,如果文本串中大量出现了words中的单词,这个方法的效率就会很低。这里做了优化:建立一个hashset保存着已扫描的所有失败案例,当新的ps在这个失败案例集中时,直接判定失败。

public List
findSubstring(String s, String[] words) { int N = s.length(); int M = words.length; HashMap ct = new HashMap(); HashSet
hs = new HashSet(); List
result = new LinkedList(); for(int i=0;i
0){ int c = (int) nc.get(tryfind); c--; nc.put(tryfind, c); }else{ hs.add(ps); break; } } if(getj>=wlen*M-wlen+1) result.add(i); } return result; }

你可能感兴趣的文章
Redis Cluster分区实现原理
查看>>
sqlalchemy--group_concat的使用
查看>>
Git flow 工作流与规范
查看>>
【Mood-3】心声
查看>>
企业IT管理说:全自动就一定是最好的吗?
查看>>
安装mod_rpaf让apache获取访客真实IP
查看>>
linux 脚本保留日志
查看>>
680. Valid Palindrome II
查看>>
Laravel5.1 路由 -路由分组
查看>>
php 验证码
查看>>
Windows的线程使用
查看>>
LeetCode : Palindrome Linked List
查看>>
Python 编程(小试水)
查看>>
[Webkit]最简单易用的webkit学习环境-ISee
查看>>
day01_步入百万年薪的第一天
查看>>
*HDU1800字典树
查看>>
HDU2527 哈夫曼编码
查看>>
Pycharm远程连接服务器(windows下远程修改服务器代码)
查看>>
用Python调用阿里云的短信接口
查看>>
sctp和tcp的区别
查看>>