环绕字符串中的唯一子字符串

传送门:https://leetcode-cn.com/problems/unique-substrings-in-wraparound-string/

十分好的题目!

利用动态规划减少重复计算,巧妙的计数方法

题意:

给你一个按字母表顺序来的无限循环的字符串S : "a~z~a~z..." 。

然后给你一个只含小写字母的匹配串p。

p中显然有 C(n,2)个字符串。问你这C(n,2)个字符串中有多少不同的字符串在S中出现过,或者说是S的子字符串。

思路:

要求为S的子字符串,我们显然可以发现,p中符合要求的子字符串一定是连续一段一段的。所以我们可以O(n)的扫描,把这些分段都给找出来。

之后就是利用动态规划的思想减少重复计算。要求的是非重复的子字符串。我们可以将这些字符串分类。

考虑计数的方法:最终每个符合答案的子字符串一定是以某一个字母为开头的.而且根据S字符串的特性,我们可以认为,(一个字符串开头的字母 , 此字符串的长度) 能够唯一决定一个本质不同的字符串。所以我们将字符串分类。令

最后加和dp即是答案.

你可能感兴趣的:(环绕字符串中的唯一子字符串)