码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode: Substring with Concatenation of All Words

时间:2014-06-14 09:07:00      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   color   

这道题想的时候颇费了一些周折,想过把L的所有concatenation组合出来,放到hash或map里,然后遍历S的时候直接看。但是这样如果L的size: Lsize过大的话,可能的组合有Lsize!种,组合数剧增,效率低下,所以不采用这种方法。

又考虑在S中从左向右一个word一个word遍历过去,一次只取L中一个word的大小,存入Hashmap,如果匹配到了L,则算找到了一种可能的concatenation;这样也有缺点,比如L为foo the kgm tim cog, S为bar foo tim cog kgm tim foo the, S遍历到第二个tim时出现不匹配,所以我的指针得跳到第一个tim的下一个,才能不漏掉所有的可能性。我要想跳到第一个tim得存下它的位置,这就要求hashmap的value为元素位置,这就导致我不好进行匹配,因为L若要存为一个hashmap,它的value我无法确定

所以参考网上有了第三种做法,先把L中的word存入一个Hashmap, 记录每个word的出现次数,然后在S中从左向右挨个遍历过去,每次取wsize * Lsize个字母分成Lsize份存入Hashmap中,每份大小为wsize, 然后比较这个Hashmap与L的Hashmap是否匹配

 1 import java.util.*;
 2 
 3 public class Solution {
 4     public List<Integer> findSubstring(String S, String[] L) {
 5         ArrayList<Integer> result = new ArrayList<Integer>();
 6         if (S.length() == 0 || L.length == 0) return result;
 7         Hashtable<String, Integer> obj = new Hashtable<String, Integer>();
 8         Hashtable<String, Integer> real = new Hashtable<String, Integer>();
 9         int Lsize = L.length;
10         int wsize = L[0].length();
11         for (String a : L) {
12             if (obj.containsKey(a)) {
13                 int k = obj.get(a);
14                 obj.put(a, k+1);
15             }
16             else obj.put(a, 1);
17         }
18         
19         for (int i = 0; i <= S.length() - Lsize * wsize; i++) {
20             real.clear();
21             for (int j = 0; j <= Lsize - 1; j++) {
22                 String temp = S.substring(i + j * wsize, i + j * wsize + wsize);
23                 if (real.containsKey(temp)) {
24                     int m = real.get(temp);
25                     real.put(temp, m+1);
26                 }
27                 else real.put(temp, 1);
28             }
29             if (real.equals(obj)) {
30                 result.add(i);
31             }
32         }
33         
34         return result;
35     }
36 }

 

Leetcode: Substring with Concatenation of All Words,布布扣,bubuko.com

Leetcode: Substring with Concatenation of All Words

标签:style   class   blog   code   java   color   

原文地址:http://www.cnblogs.com/EdwardLiu/p/3787810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!