leetcode 30. 串联所有单词的子串 【时间击败 90.28%】 【内存击败 97.44%】
这道题让我从早做到晚-3-……
设len=words[0].length()。
一开始我按照words的顺序扩大区间,发现这样就依赖words的顺序。之后改成遍历s的所有长度为len*words.length的区间,超时,因为没有重复利用信息,只是单纯的暴力,每次i++移动一个单位是无法重复利用信息的。
要重复利用,只能每次移动len,这是能遍历所有情况的,以0~len-1为开头,每次移动len,就能遍历所有可能的情况。
话说hashmap是真的快,比数组遍历快得多
1 public List<Integer> findSubstring(String s, String[] words) {
2 if (s == null || words == null || words.length == 0 || s.length() == 0) return new ArrayList<>();
3
4 int i, j, k, z;
5 HashMap<String, Integer> MAP = new HashMap<>();
6 HashMap<String, Integer> map = new HashMap<>();
7 ArrayList<Integer> al = new ArrayList<>();
8 StringBuilder sb = new StringBuilder(s);
9
10 for (i = 0; i < words.length; i++) MAP.put(words[i], MAP.getOrDefault(words[i], 0) + 1);
11
12 int len = words[0].length();
13
14 String tmp, t2;
15 for (k = 0; k < len; k++) {
16 map.clear();
17 map.putAll(MAP);
18
19 OUT:
20 for (i = k, j = k; j + len <= s.length(); j += len) {
21 tmp = sb.substring(j, j + len);
22 if (!map.containsKey(tmp)) {
23 for (z = i; z < j; z += len) {
24 tmp = sb.substring(i, i + len);
25 map.put(tmp, map.get(tmp) + 1);
26 }
27 i = j + len;
28 continue;
29 }
30 map.put(tmp, map.get(tmp) - 1);
31 while (map.get(tmp) < 0 && i + len <= j) {
32 t2 = sb.substring(i, i + len);
33
34 map.put(t2, map.get(t2) + 1);
35 i += len;
36 }
37 for (Integer v : map.values()) if (v != 0) continue OUT;
38 al.add(i);
39 t2 = sb.substring(i, i + len);
40 map.put(t2, map.get(t2) + 1);
41 i += len;
42 }
43 }
44 return al;
45 }
leetcode 30. 串联所有单词的子串 【时间击败 90.28%】 【内存击败 97.44%】的更多相关文章
- Java实现 LeetCode 30 串联所有单词的子串
30. 串联所有单词的子串 给定一个字符串 s 和一些长度相同的单词 words.找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配, ...
- [LeetCode] 30. 串联所有单词的子串
题目链接: https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/ 题目描述: 给定一个字符串 s 和一 ...
- Leetcode 30 串联所有单词的子串 滑动窗口+map
见注释.滑动窗口还是好用. class Solution { public: vector<int> findSubstring(string s, vector<string> ...
- [LeetCode] 30. Substring with Concatenation of All Words 串联所有单词的子串
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- [LeetCode] Substring with Concatenation of All Words 串联所有单词的子串
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- 【LeetCode-面试算法经典-Java实现】【030-Substring with Concatenation of All Words(串联全部单词的子串)】
[030-Substring with Concatenation of All Words(串联全部单词的子串)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Yo ...
- Leetcode 30.与所有单词相关联的子串
与所有单词相关联的字串 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能 ...
- [leetcode] 30. 与所有单词相关联的字串(cn第653位做出此题的人~)
30. 与所有单词相关联的字串 这个题做了大概两个小时左右把...严重怀疑leetcode的judge机器有问题.同样的代码交出来不同的运行时长,能不能A题还得看运气? 大致思路是,给words生成一 ...
- Leetcode——30.与所有单词相关联的字串【##】
@author: ZZQ @software: PyCharm @file: leetcode30_findSubstring.py @time: 2018/11/20 19:14 题目要求: 给定一 ...
- 【LeetCode 30】串联所有单词的子串
题目链接 [题解] 开个字典树记录下所有的单词. 然后注意题目的已知条件 每个单词的长度都是一样的. 这就说明不会出现某个字符串是另外一个字符串的前缀的情况(除非相同). 所以可以贪心地匹配(遇到什么 ...
随机推荐
- P3Depth: Monocular Depth Estimation with a Piecewise Planarity Prior
1. 论文简介 论文题目:P3Depth: Monocular Depth Estimation with a Piecewise Planarity Prior Paper地址:paper Code ...
- 使用nodejs编写api接口并部署到服务器上
一.用node.js编写api接口 1.安装node环境,没有就去下载nodejs, 下载地址 2.创建一个node项目, 新建一个目录文件,例node_proxy 3.在新建的node项目执行npm ...
- 2021强网杯青少赛(qwtac)楼上大佬ddw WriteUp
楼上大佬ddw战队WRITEUP 战队信息 战队名称:楼上大佬ddw 战队排名:24 解题情况 解题过程 01 签到 操作内容: 下载附件,打开运行拿到flag 如该题使用自己编写的脚本代码请详细写出 ...
- Fast RCNN论文阅读笔记
1.Introduction 1.1 RCNN 和SPPnet RCNN有几个显著的问题:1.训练的时候是多阶段的训练,分别分三个阶段训练卷积层.SVM.边框回归矩阵.2.训练很耗时.3.目标定位非常 ...
- (6)go-micro微服务consul配置、注册中心
目录 一 Consul介绍 1. 注册中心Consul基本介绍 2.注册中心Consul关键功能 3.注册中心Consul两个重要协议 二 Consul安装 1.使用docker拉取镜像 三 Conf ...
- Java用户交互方法——Scanner
Scanner用户交互 使用Next方法接收 Scanner scanner = new Scanner(System.in); if(scanner.hasNext()){//判断用户有无输入 St ...
- (转载)零日攻击(Zero-Day Attacks)
零日攻击是网络安全行业中十分常见的攻击方式之一,其具有很大的突发性与破坏性,那么零日攻击是什么?如何防范零日攻击?以下是详细的内容介绍. 零日攻击是什么? 零日漏洞或零时差漏洞通常是指还没有补丁的安全 ...
- ng-alain全局配置NzMessageService
官方文档是这样子的,抄下来会报错,因为没有后两个设置 import { NgZorroAntdModule, NzConfig, NZ_CONFIG } from 'ng-zorro-antd'; c ...
- final关键字用于修饰类-final关键字用于修饰成员方法
final关键字与四种用法 概念 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容容,比如,方法重写.那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的.为了避免这种 ...
- NodeJS 实战系列:DevOps 尚未解决的问题
本文将通过展示 NodeJS 应用里环境变量的提取过程,来一窥 DevOps 技术是如何应用在现在云平台上的运维工作中的.同时我也想让大家在这里看到 DevOps 的另外一面,即它并非全能,从本地开发 ...