列表

详情


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

把字符串 s 看作 "abcdefghijklmnopqrstuvwxyz" 的无限环绕字符串,所以 s 看起来是这样的:

现在给定另一个字符串 p 。返回 s不同 p非空子串 的数量 。 

 

示例 1:

输入:p = "a"
输出:1
解释:字符串 s 中只有 p 的一个 "a" 子字符。

示例 2:

输入:p = "cac"
输出:2
解释:字符串 s 中只有 p 的两个子串 ("a", "c") 。

示例 3:

输入:p = "zab"
输出:6
解释:在字符串 s 中有 p 的六个子串 ("z", "a", "b", "za", "ab", "zab") 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int findSubstringInWraproundString(string p) { } };

python3 解法, 执行用时: 116 ms, 内存消耗: 15 MB, 提交时间: 2022-05-25 11:13:30

class Solution:
    def findSubstringInWraproundString(self, p: str) -> int:
        # dp[α] 表示 p 中以字符 α 结尾且在 s 中的子串的最长长度
        dp = defaultdict(int)
        k = 0
        for i, ch in enumerate(p):
            if i > 0 and (ord(ch) - ord(p[i-1])) % 26 == 1:
                k += 1
            else:
                k = 1
            dp[ch] = max(dp[ch], k)
        return sum(dp.values())

上一题