博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】30. Substring with Concatenation of All Words
阅读量:5141 次
发布时间:2019-06-13

本文共 1678 字,大约阅读时间需要 5 分钟。

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

题意:找出所给列表words中的单词相接的子句在s中出现的索引。

注意:words中的单词可能重复出现

思路:1.建立一个字典wdict,统计words中所有单词的个数

  2.判断s中所有可能的子句是否符合要求

    1)判断字据中每个单词是否出现在wdict中,没有的话,此子句不符合要求

    2)子句符合要求的话,加入新的属于子句的字典,如果子句中某个单词出现的次数超过wdict中这个单词出现的个数,此子句不符合要求

1 class Solution(object): 2     def findSubstring(self, s, words): 3         """ 4         :type s: str 5         :type words: List[str] 6         :rtype: List[int] 7         """ 8         res = [] 9         length = len(words[0])10         num = len(words)11         l = length*num12         lens = len(s)13         wdict = {}14         sset = set()#建立集合,收集所有已经符合条件的字句,减少判断次数15         for word in words:16             wdict[word] = 1+(wdict[word] if word in wdict else 0)17         first_char = set(w[0] for w in words)#建立集合收集所有单词中的第一个字母,减少isRequired的次数18         for i in range(lens-l+1):19             if s[i] in first_char:20                 tmp = s[i:i+l]21                 if tmp in sset or self.isRequired(tmp,wdict,length):22                     sset.add(tmp)23                     res.append(i)24         return res25     def isRequired(self,s,wdict,length):26         comp = {}27         i = 028         while(i
wdict[tmp]:35 return False36 i += length37 return True38 39

 

    

转载于:https://www.cnblogs.com/fcyworld/p/6284707.html

你可能感兴趣的文章
ad logon hour
查看>>
罗马数字与阿拉伯数字转换
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
php match_model的简单使用
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
移动开发平台-应用之星app制作教程
查看>>
如何在maven工程中加载oracle驱动
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
DataGridView的行的字体颜色变化
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>