LeetCode 29 Substring with Concatenation of All Words

You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening
characters.

For example, given:

S: "barfoothefoobarman"

L: ["foo", "bar"]

You should return the indices: [0,9].

(order does not matter).

思路:

第一步:对数组L进行处理,建立一个hashmap,为后面的处理做准备,不能建立hashset,因为L中有可能有重复的,也不能建立ArrayList或者LinkedList,处理大数据会超时。

第二步:若从S[a]~S[b]中包含L中所有字串,我们在处理S[a+L[0].length()] ~ S[b+L[0].length()] 时只需要判断S[b]~S[b+L[0].length()]与S[a]~S[a+L[0].length()]相等即可,若相等,则说明S[a+L[0].length()]
~ S[b+L[0].length()]也是符合要求的,若不相等,则不符合要求,直接否却掉。

	public List<Integer> findSubstring(String S, String[] L) {
		ArrayList<Integer> result = new ArrayList<Integer>();
		int len = L.length * L[0].length();
		HashMap<String, Integer> hm = new HashMap<String, Integer>();
		for (int i = 0; i < L.length; i++) {
			if (hm.containsKey(L[i])) {
				int value = hm.get(L[i]);
				value++;
				hm.put(L[i], value);
			} else {
				hm.put(L[i], 1);
			}
		}

		for (int i = 0; i <= S.length() - L[0].length() * L.length; i++) {
			HashMap<String, Integer> hashmap = new HashMap<String, Integer>(hm);
			String str = S.substring(i+len-L[0].length(), i + len);
			if (result.contains(i - L[0].length())) {
				String temp = S.substring(i - L[0].length(), i);
				if (temp.contains(str)) {
					result.add(i);
				}
			} else {
				boolean flag = true;
				for (int j = 0; j < len; j += L[0].length()) {
					str = S.substring(i + j, i + j + L[0].length());
					if (!hashmap.containsKey(str) || hashmap.get(str) == 0) {
						flag = false;
						break;
					} else {
						int value = hashmap.get(str);
						value--;
						hashmap.put(str, value);
					}
				}
				if (flag)
					result.add(i);
			}
		}

		return result;
	}
}
时间: 2024-08-06 07:40:51

LeetCode 29 Substring with Concatenation of All Words的相关文章

[LeetCode] 030. Substring with Concatenation of All Words (Hard) (C++/Java)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 030. Substring with Concatenation of All Words (Hard) 链接: 题目:https://oj.leetcode.com/problems/substring-with-concatenation-of-all-words/ 代码(github):https://gi

【leetcode】Substring with Concatenation of All Words

Substring with Concatenation of All Words You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any interv

[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 starting indices of substring(s) in s that is a concatenation of each word in wordsexactly once and without any intervening characters. For example, give

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

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 an

leetCode 30.Substring with Concatenation of All Words (words中所有子串相连) 解题思路和方法

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 an

LeetCode 030 Substring with Concatenation of All Words

题目要求:Substring with Concatenation of All Words You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any i

leetcode 之 Substring with Concatenation of All Words

Substring with Concatenation of All Words You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any interv

[*leetcode 30] Substring with Concatenation of All Words

You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters. For example, given:S: "b

19.1.30 [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 starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters. Example 1: Input