首页 > 其他分享 >子串

子串

时间:2024-01-19 13:11:51浏览次数:14  
标签:子串 状态 个且 复杂度 不选 串前

很容易想到一个状态\(f[i][j][k]\)表示\(A\)串前\(i\)个,\(B\)串前\(j\)个,从\(A\)中取了\(k\)个子串的总方案数

但是稍微推一下状态转移方程就可以知道这个时间复杂度和空间复杂度都会爆炸,其中时间复杂度为\(O(nm^2k)\)

空间复杂度可以用滚动数组来优化,所以我们先放下不管,我们先来考虑时间复杂度怎么优化

状态肯定是类似的,没有其他很多的选择,所以我们要微调状态

这个时间复杂度之所以会多一个\(m\),就是因为我们在推方程的时候,要枚举互相匹配的\(A\)末尾的一段与\(B\)末尾的一段的长度

所以我们微调状态为\(f[i][j][k][0/1]\),其中\(0\)表示不选\(A[i]\),\(1\)表示要选

这样就可以把多一个\(m\)消掉

然后用滚动数组优化就可以了

总结一下我们目前遇到的微调状态:前\(i\)个(LCS问题),前\(i\)个且以\(i\)结尾(LIS问题),前\(i\)个且第\(i\)个可以选也可以不选(本题)

如果是两个串就是以上状态的排列组合

标签:子串,状态,个且,复杂度,不选,串前
From: https://www.cnblogs.com/dingxingdi/p/17974397

相关文章

  • 区间本质不同子串个数
    传送门LCT好题。description给定一个长度为\(n\)的只包含小写英文字母的字符串。有\(m\)次询问,每次问一个子串的本质不同子串个数。\(n\leq10^5\)\(m\leq2\times10^5\)solution考虑按询问右端点从小到大离线。先建出母串的SAM,设\(\text{len}_x\)表示状......
  • 2024-01-17:lc的30. 串联所有单词的子串
    2024-01-17:用go语言,给定一个字符串s和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefab",&quo......
  • 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例3:......
  • 无重复字符的最长子串2
    classSolution{public:intlengthOfLongestSubstring(strings){//哈希集合,记录每个字符是否出现过unordered_set<char>occ;intn=s.size();//右指针,初始值为-1,相当于我们在字符串的左边界的左侧,还没有开始移动int......
  • #yyds干货盘点# LeetCode程序员面试金典:至少有 K 个重复字符的最长子串
    题目给你一个字符串s和一个整数k,请你找出s中的最长子串,要求该子串中的每一字符出现次数都不少于k。返回这一子串的长度。如果不存在这样的子字符串,则返回0。 示例1:输入:s="aaabb",k=3输出:3解释:最长子串为"aaa",其中'a'重复了3次。示例2:输入:s="aba......
  • python 串联所有单词的子串 多种解法
    解法一:使用递归deffind_substrings(s,words):ifnotsornotwords:return[]word_length=len(words[0])num_words=len(words)total_length=word_length*num_wordssubstrings=[]deffind_substrings_helper(s,......
  • 每日一题:给定一个字符串s,请你找出其中不含有重复字符得最长子串的长度
    每日一题:给定一个字符串s,请你找出其中不含有重复字符得最长子串的长度functiongetLongSubstring(s){letmap=newMap();letmax=0;letleft=0;for(leti=0;i<s.length;i++){if(map.has(s[i])&&map.get(s[i])>=left){left=map.get(s[i])+1;......
  • 『LeetCode』5. 最长回文子串 Longest Palindromic Substring
    题目描述给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入**:s="cbbd"输出:"bb"提示:1<=s.length<=1000s仅由数字和英文字母组......
  • 『LeetCode』3. 无重复字符的最长子串 Longest Substring Without Repeating Characte
    『1』双指针算法我的想法:一般看到字符串子串问题想到用双指针解,看到字符串子序列问题想到用动态规划解。此题用双指针可以很快解题。遍历字符串中的每个字符s.charAt[i],对于每一个i,找到j使得双指针[j,i]维护的是以s.charAt[i]结尾的无重复字符的最长子串,长度为i-j+1,......
  • python动态规划求解最长回文子串
    回文是什么,回文是正着读和反着读都是一样的字符叫着回文。 如‘aba’,‘aa’,‘b’,这些都是回文classSolution:deflongestPalindrome(self,s:str)->str:n=len(s)dp=[[False]*nfor_inrange(n)]ans=""forlinrange(n):......