题目描述
求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
题目分析:
1对于字典序的理解 是从首字母第一个开始比较的
2.对于此题我们可以想到要求不同长度的字符串的个数 也就是常用的动态规划 对于每一个长度我们分为3部分来求解
比如对于abc 到efg 我们可以这么来求解 对于长度1就不说了 a b c d e
对于长度2 我们可以求a 到e 长度为2的差 为(e-a)*pow(26,1) a到ab 这中间还有个计数 我们需要减去 e到ef也有个计数我们需要加上
3. 我们要注意溢出,最后需要减1
源代码如下:
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner in=new Scanner(System.in);
while(in.hasNextLine())
{
String[] line=in.nextLine().split(" ");
String s1=line[0];
String s2=line[1];
int len1=Integer.valueOf(line[2]);
int len2=Integer.valueOf(line[3]);
char[] a=s1.toCharArray();
char[] b=s2.toCharArray();
int t=b[0]-a[0];
long sum=0;
for(int i=len1;i<=len2;i++)
{
sum+=t*(long)Math.pow(26,i-1);
long suma=0;
int min=Math.min(i,a.length);
for(int j=1;j<min;j++)
{
int x=a[j]-'a'+1;
suma+=x*(long)Math.pow(26,i-j-1);
}
long sumb=0;
min=Math.min(i,b.length);
for(int j=1;j<min;j++)
{
int x=b[j]-'a'+1;
sumb+=x*(long)Math.pow(26,i-j-1);
}
sum=(sum+sumb-suma);
}
sum=(sum-1)%1000007;
System.out.println(sum);
}
}
}