字符串计数

求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。

输入描述:
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)

输入

ab ce 1 2

输出

56

# --*-- coding:utf-8 --*--
import sys
#  思路: 想象成26进制的数,有点动态规划的思想,res[]存放状态数,后一个要依赖于前一个
def main():
    try:
        while True:
            line = sys.stdin.readline().strip()
            s1,s2,lens1,lens2 = line.split()
            len1 = int(lens1)
            len2 = int(lens2)
            if s1 >= s2:
                print 0
            res = [0]*len2    #  存放每一个字符长度的数量
            k = 0
            while s1[k] == s2[k]:
                res[k] = 0
                k += 1
            j = k
            res[j] = ord(s2[j]) - ord(s1[j]) - 1   # 初始的边界值
    
            lenOfs1 = len(s1)
            lenOfs2 = len(s2)
    
            for i in range(j + 1,len2): # i 的值同样对应res
                tmp = res[i - 1] * 26   # 会分成三种情况,这种可以直接乘以26
                if i < lenOfs1:     # 若后边还有字符
                    tmp += ord('z') - ord(s1[i])
                else:
                    tmp += 26
                if i < lenOfs2:
                    tmp += ord(s2[i]) - ord('a')
                else:
                    tmp += 26
                res[i] = tmp
            print sum(res[len1 - 1 : len2])%1000007
    except:
        pass

if __name__ == "__main__":
    main()
原文地址:https://www.cnblogs.com/simplepaul/p/7289456.html