String 具有给定约束的子字符串数

String 具有给定约束的子字符串数,string,algorithm,String,Algorithm,我得到一个排序字符串,我希望计算子字符串(不一定是连续的)的数量,这些子字符串可能具有以下约束: 子字符串中的所有字母表应按顺序排序 子字符串只能包含1个元音 子字符串的长度应大于或等于3 例如: 对于“aabbc”, 我们有3个子字符串“abc”、“abb”、“abbc”,它们与上述约束匹配 我如何处理一般字符串 我已经试了2-3个小时,但找不到合适的方法。我在今天的一轮编程中被问到这个问题,我担心明天的面试中也会问同样的问题。即使是提示或方法也会受到欢迎。假设我们有k个元音,并且有一个数组A

我得到一个排序字符串,我希望计算子字符串(不一定是连续的)的数量,这些子字符串可能具有以下约束:

  • 子字符串中的所有字母表应按顺序排序
  • 子字符串只能包含1个元音
  • 子字符串的长度应大于或等于3
  • 例如:

    对于“aabbc”, 我们有3个子字符串“abc”、“abb”、“abbc”,它们与上述约束匹配

    我如何处理一般字符串


    我已经试了2-3个小时,但找不到合适的方法。我在今天的一轮编程中被问到这个问题,我担心明天的面试中也会问同样的问题。即使是提示或方法也会受到欢迎。

    假设我们有k个元音,并且有一个数组A指定每个非元音的直方图。(即,
    A[0]
    是第一个非元音的数字,
    A[1]
    是第二个非元音的数字。)

    然后(忽略长度限制)我们对元音有k个选择,对其余字母有
    (A[0]+1)*(A[1]+1)*(A[2]+1)*……
    选择(对于每个非元音,我们可以有
    0,1,2,…,A[i]
    选择)

    对于单字母的情况,这会多计k,对于双字母的情况,这会多计k*len(A),所以只需从总数中减去这些

    Python代码示例:

    from collections import Counter
    s='aabbc'
    
    vowels = 'aeiou'
    C = Counter(s)
    t = 1
    vowel_count = 0
    cons_count = 0
    for letter,count in C.items():
        if letter in vowels:
            vowel_count += 1
        else:
            cons_count += 1
            t *= count+1
    
    print vowel_count * (t - cons_count - 1)
    

    假设我们有k个元音,一个数组指定每个非元音的直方图。(即,
    A[0]
    是第一个非元音的数字,
    A[1]
    是第二个非元音的数字。)

    然后(忽略长度限制)我们对元音有k个选择,对其余字母有
    (A[0]+1)*(A[1]+1)*(A[2]+1)*……
    选择(对于每个非元音,我们可以有
    0,1,2,…,A[i]
    选择)

    对于单字母的情况,这会多计k,对于双字母的情况,这会多计k*len(A),所以只需从总数中减去这些

    Python代码示例:

    from collections import Counter
    s='aabbc'
    
    vowels = 'aeiou'
    C = Counter(s)
    t = 1
    vowel_count = 0
    cons_count = 0
    for letter,count in C.items():
        if letter in vowels:
            vowel_count += 1
        else:
            cons_count += 1
            t *= count+1
    
    print vowel_count * (t - cons_count - 1)
    

    @tobias_k未指定任何约束!输入字符串是否总是按顺序排序?@peterdererivaz不一定!但你总是可以排序的!好的,我会编辑这个问题,让它更具可读性!啊,所以您不必选择子字符串,甚至子序列,但可以自由地重新排列所选字符。这是正确的吗?@tobias_k没有指定这样的约束!输入字符串是否总是按顺序排序?@peterdererivaz不一定!但你总是可以排序的!好的,我会编辑这个问题,让它更具可读性!啊,所以您不必选择子字符串,甚至子序列,但可以自由地重新排列所选字符。这是正确的吗?