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 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).

思路:leetcode 上有些题通过率低,并不见得是算法难,我认为非常大一部分原因是题目描写叙述不清晰。导致规则理解不透彻,所以编程的时候就会发生规则理解偏差的问题。

本题也是一样,刚一開始对规则理解偏差比較多,以为wors中字符出如今子串中出现一次就可以,无论反复还是不反复,可是后面提交只是时,看case全然理解错了规则,仅仅能又一次改写代码,非常麻烦。

怨言非常大,规则制定和说明也是非常重要的一点。

代码例如以下:

public class Solution {
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> list = new ArrayList<Integer>();
if(words.length == 0 || s.length() == 0){
return list;
}
Map<String,Integer> map = new HashMap<String,Integer>();//保存个数以及值
for(int i = 0; i < words.length; i++){
if(map.get(words[i]) == null){
map.put(words[i],1);//将word保存
}else{
map.put(words[i],map.get(words[i])+1);//将word保存的数值+1
}
}
Map<String,Integer> mapValue = new HashMap<String,Integer>(map);//保存反复的个数,方便又一次赋值
int len = words.length;//去除反复之后的数组长度 int wordLen = words[0].length();
String temp = "";
int count = 0;//每一个单词出现一次,就记录一次
for(int i = 0; i <= s.length() - len*wordLen;i++){
count = 0;//初始化
for(int j = 0; j < len;j++){
temp = s.substring(i + j * wordLen,i + (j+1) * wordLen);//截取wordLen长的字符串
if(map.get(temp) != null && map.get(temp) != 0){//假设map还有多于0个
map.put(temp,map.get(temp)-1);//map中数值减去1
count++;//记录数+1
}else{
break;
}
}
if(count == len){//假设记录数与len相等。则说明符合要求
list.add(i);
}
//HashMap又一次初始化
for(String key:map.keySet()){//这样更高速
map.put(key,mapValue.get(key));
}
}
return list;
}
}

leetCode 30.Substring with Concatenation of All Words (words中全部子串相连) 解题思路和方法的更多相关文章

  1. LeetCode - 30. Substring with Concatenation of All Words

    30. Substring with Concatenation of All Words Problem's Link --------------------------------------- ...

  2. [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 ...

  3. [LeetCode] 30. Substring with Concatenation of All Words 解题思路 - Java

    You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...

  4. Java [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 a ...

  5. [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 ...

  6. LeetCode 30 Substring with Concatenation of All Words(确定包含所有子串的起始下标)

    题目链接: https://leetcode.com/problems/substring-with-concatenation-of-all-words/?tab=Description   在字符 ...

  7. [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 ...

  8. leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  9. leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

随机推荐

  1. HDU 6313: Hack it

    Hack It Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. Java的ClassLoader机制

    http://blog.chenlb.com/2009/06/java-classloader-architecture.html http://blog.csdn.net/lovingprince/ ...

  3. [BZOJ 2756] 奇怪的游戏

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2756 Algorithm: 比较新颖的题目 首先发现是对矩阵中相邻两数进行操作    & ...

  4. 【贪心】Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

    从后向前枚举字符串,然后从左向右枚举位. 如果该串的某位比之前的串的该位小,那么将之前的那串截断. 如果该串的某位比之前的串的该位大,那么之前那串可以直接保留全长度. 具体看代码. #include& ...

  5. 【二分】【动态规划】Codeforces Round #393 (Div. 1) B. Travel Card

    水dp,加个二分就行,自己看代码. B. Travel Card time limit per test 2 seconds memory limit per test 256 megabytes i ...

  6. 【KMP】BZOJ3670-[Noi2014]动物园

    [题目大意][依然借用别人的概括]给定一个长为L的字符串(L<=100W),求一个num数组,num[i]表示长度为i的前缀中字符串S’的数量,其中S‘既是该前缀的前缀也是该前缀的后缀,且|S' ...

  7. centos7.2+zabbix3.2+sedmail邮件告警

    http://blog.csdn.net/xiegh2014/article/details/56277111

  8. 使用Spring Boot上传文件

    原文:http://www.cnblogs.com/ityouknow/p/8298344.html 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spri ...

  9. ios滚动UIScrollView的setContentOffset方法

    在UIScrollView,setContentOffset方法的功能是跳转到你指定内容的坐标,[self.scroview setContentOffset:CGPointMake(0, 50) a ...

  10. SQL Server 基础 之 CASE 子句

    SELECT TOP 10 SalesOrderID, SalesOrderID % 10 AS 'Last Digit',-- 求最后一位的值 Position = CASE SalesOrderI ...