题目描述
求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
IDEA
从len1到len2依次计算,求和。
s1和s2的第一个字符a,b 单独处理,看从a 到b有几个字符,第一个字符后到 i 位可以为任意字符,故 *26^(i-1)
然后分别计算s1和s2除去第一位之后大于该字符串的个数,相减
CODE
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
String s=scan.nextLine();
String[] array=s.split(" ");
char[] s1=array[0].toCharArray();
char[] s2=array[1].toCharArray();
int len1=Integer.parseInt(array[2]);
int len2=Integer.parseInt(array[3]);
long res=0;
for(int i=len1;i<=len2;i++){
char a=s1[0];
char b=s2[0];
res+=(long)Math.pow(26,i-1)*(b-a);
long sum_a=0,sum_b=0;
for(int j=1;j<s1.length;j++){
sum_a+=(s1[j]-'a')*(long)Math.pow(26,i-1-j);
}
for(int j=1;j<s2.length;j++){
sum_b+=(s2[j]-'a')*(long)Math.pow(26,i-1-j);
}
res+=sum_b-sum_a;
}
res--;
res%=1000007;
System.out.println(res);
}
}
}