[leetcode] 30. Substring with Concatenation of All Words

网友投稿 293 2022-08-26

[leetcode] 30. Substring with Concatenation of All Words

Description

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:

s = "barfoothefoobarman", words = ["foo","bar"]

Output:

[0,9]

Explanation:

Substrings starting at index 0 and 9 are "barfoor" and "foobar" respectively.The output order does not matter, returning [9,0] is fine too.

Example 2:

Input:

s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]

Output:

[]

分析

题目的意思是:串联所有单词的子串.

只需要两个map就行了,其中一个map1记录每个单词的频率,然后遍历原字符串,由于单词是固定长度的,所以每次截取固定长度的单词,判断其是否在map1中,如果在,判断其是否有重复,所有第二个map2的作用就来了,用map2来记录其统计我们匹配的每个单词的频率,这样可以判断是否有重复,map2上的每个单词都在map1中,且不重复,这样就可以得到符合要求的子字符串的起始位置。

代码

class Solution {public: vector findSubstring(string s, vector& words) { vector res; if(s.empty()||words.empty()){ return res; } int m=words.size(); int n=words[0].size(); unordered_map m1; for(auto word:words){ m1[word]++; } int len=s.length(); for(int i=0;i<=len-m*n;i++){ unordered_map m2; int j=0; for(;jm1[t]){ break; } } if(j==m){ res.push_back(i); } } return res; }};

参考文献

​​[编程题]substring-with-concatenation-of-all-words​​​​[LeetCode] Substring with Concatenation of All Words 串联所有单词的子串​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 572. Subtree of Another Tree
下一篇:清风首启元宇宙花园,打造“花式”营销浪漫 !
相关文章

 发表评论

暂时没有评论,来抢沙发吧~