【问题标题】:find count of substrings of all anagrams of 1st string that are anagram of 2nd查找第一个字符串的所有字谜的子串计数,这些字串是第二个字谜
【发布时间】:2017-12-04 18:02:06
【问题描述】:

需要一种方法来解决这个问题!

问题:给定两个包含小写字母的字符串,计算第一个字符串的所有不同字谜中非相交子串的匹配数以 10^9+7 为模,使得它们等于第二个字符串的任何字谜。

示例:
1) 字符串 1:“ABC”,字符串 2:“AB”
答案 = 4
解释 : 'ABC','BAC','CAB','CBA' 都贡献了 1 个这样的匹配。

2) 字符串 1:“ABCAB”,字符串 2:“AB”
答案 = 40
解释:字符串 1 'ABAABC' 的一个可能的 Anagram 匹配计数为 2,即 'AB' 和 'AB',而 'BABCA' 仅提供一个匹配,即 'BA' 或 'AB'。

约束:
n,m 是第一个和第二个字符串的长度
0 0

我尝试使用的方法包括预先计算前 200 个阶乘以 10^9+7 为模,然后从给定的字符串计算字符串可以具有的最大非相交模式 (mx) 并从 p=1 循环到 mx并计算第一个字符串的重新排列次数,该字符串正好包含 p 个不相交的子字符串(即字符串 2)模式。

我在这里缺少其他方法吗?

【问题讨论】:

    标签: count permutation dynamic-programming


    【解决方案1】:

    这是您可以使用的另一种方法 -

    1)计算string2的字谜数。您可以谷歌排列和组合来获得这样做的方法(在 O(1) 中)(比如 x)。

    2) 计算 string1 最多可以贡献多少个 string2。这可以通过计算字符串的字符在 string2 中重复的次数来完成。就像在第二个示例中一样,“A”和“B”在字符串 2 中重复两次,这样您一次最多可以得到字谜。注意 - 如果字符频率不匹配,则选择最小的数字。就像对于某些字符串“A”重复三次而“B”重复两次一样,您最多可以获得 2 个字谜,因此您采用最低重复字符的频率。

    3) 使用排列组合公式计算答案-

    • 只有一个 string2 字谜的 string1 字谜数 x*(n1-n2+1) 其中 n1 和 n2 分别是 string1 和 2 的长度。
    • 有两个字谜 - (n1- 2*n2+2)*x*x
    • 等等

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2017-08-23
      • 2015-11-11
      • 2012-01-22
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多