子序列
描述
给定一个字符串,求出该字符串有多少不同的子序列。
子序列:字符串中按顺序抽出一些字符得到的串。比如字符串abcd里,ab、ac、ad、abc、acd都是子序列。
输入
输入一个字符串。
输出
输出不同的子序列的个数除以23333得到的余数。
样例1输入
ababc
样例1输出
23
样例1解释
有这些子序列:
a,b,c,aa,ab,ac,ba,bb,bc,aba,abb,abc,aab,aac,bab,bac,bbc,abab,abac,abbc,aabc,babc,ababc
样例2
请查看下发文件内的sample2_input.txt和sample2_output.txt。
限制
对于50%的数据,字符串长度不超过15;
对于100%的数据,字符串长度不超过500000。
字符串为26个小写字母组成。
时间:2 sec
空间:512 MB
提示
[令
f(i)为前i中本质不同的的子序列个数,令pre(i)表示字符
si之前出现的位置,则]
[f(i)={f(i−1)+f(i−1)+1pre(i)=0f(i−1)+f(i−1)−f(pre(i)−1)pre(i)≠0]
[答案等于
f(n).]
另外,为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板,也提供了含有算法的大部分实现细节的程序。
你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。
这些程序可以从【这里】下载。