具有K个不同字符的字符串的子序列数

时间:2016-07-16 20:23:02

标签: sequence sequences

我想解决一个问题,我需要一些帮助,因为我的代码不起作用。

好的,所以我有一个序列S(输入数据),我需要找到子序列的数量,这样不同字符的子序列号必须等于K(输入数据)

示例:

For S = abcaa and K = 3, the answer is 5.
s1 = abc
s2 = abca
s3 = abcaa
s4 = bca
s5 = bcaa

我在想一点,我在互联网上寻找答案,但我找不到我真正想要的东西。 所以,我认为我必须按顺序找到每个角色的频率,但在此之后我不知道该怎么办...

2 个答案:

答案 0 :(得分:0)

不是最有效的解决方案,但是你去了: 首先迭代你的字符串,对于每个位置,你需要做两件事。首先,从该位置迭代,直到找到k个不同的字符(使用频率数组)或直到你到达字符串的末尾。如果你发现了一个子序列,从你停止的位置再次开始迭代+ 1,当你找到的字符已经在你的频率向量中并且你没有到达字符串的末尾时,计算你找到的字母数。你在那个数字上加1(因为第一个子序列)然后你去了,找到了那个位置的所有子序列。然后你增加你的第一个索引并继续。

答案 1 :(得分:0)

Ruby解决方案:

S="abcaa"
k=3
distinct_arr = []
result = 0
S_arr = S.split("")


while S_arr.length != 0
    S_arr.each do |char|
        if !distinct_arr.include? (char)
            distinct_arr << char
        end
        if distinct_arr.length == k
            result = result + 1
        end 
        if distinct_arr.length == k + 1
            break
        end
    end
    S_arr.shift
    distinct_arr = []
end

puts result