字符串计数
求字典序在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()