题目大意
https://leetcode.com/problems/word-break-ii/
接续之前一篇博客,这道题需要输出解的全部可能。
题目分析
直接用DFS会超时,所以加了记忆化搜索就可以了,我用的是map存储,key为s中的下标,value是所有的String组合的list,map.get(i)的含义是s以i为开始的那个子串的解,要注意一下末尾的处理。
https://leetcode.com/problems/word-break-ii/
接续之前一篇博客,这道题需要输出解的全部可能。
直接用DFS会超时,所以加了记忆化搜索就可以了,我用的是map存储,key为s中的下标,value是所有的String组合的list,map.get(i)的含义是s以i为开始的那个子串的解,要注意一下末尾的处理。
https://leetcode.com/problems/restore-ip-addresses/
给你一个只含数字的字符串,输出所有的ip地址可能情况。
简单的DFS,注意一下边界条件,递归时注意分三种情况,地址是3位,2位,1位整数进行枚举
https://leetcode.com/problems/mini-parser/
实现一个反序列化的程序,反序列化一个含有数字及其嵌套的list。
细节实现题,我用了递归,注意找匹配左[
的右 ]
用到了栈。
https://leetcode.com/problems/repeated-substring-pattern/
判断字符串是否由其子串重复叠加拼接而成的
利用kmp算法的构建辅助数组,可以回忆一下kmp算法中辅助数组含义是最长相同前缀和后缀。但是lps数组跟本题的关系是什么呢?考虑一下lps数组的最后一个值,最后一个代表整个字符串的最长前缀和后缀,如果等于0,那么一定得返回false。而且还要满足m % (m - lps[m - 1]) == 0
,m - lps[m - 1]
含义是除了最长前缀的后面的部分,如果字符串是重复一个字符串拼接多次而成,那么m - lps[m - 1]
就是单独的一个“重复单元”,一定可以整除m。