标签:ring mod ace text 大于 item log 计算 return
求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)
输出答案。
ab ce 1 2
56
牛客网题解:
首先要搞清楚字典序的意思:即从两个字符串的下标为0开始进行对比,字典序是从左往右进行对比的。
例如ab,abc这样两者之间的字符串个数为aba、abb,而ab、bb两者之间的字符串个数为:ac、ad、ae…az、ba这26个,所以高位的字符串个数要是26的i次幂。
其次,要理解题目的“长度在len1到len2的字符串的个数”,指的是长度在len1的字符串个数、长度在len1+1的字符串个数。。。长度为len2的字符串个数。
例abcde、acede这两个字符串,长度为1到4表示的是长度为1的时候两个字符a、a之间的个数,长度为2的时候两个字符ab、ac之间的个数,长度为3的时候abc、ace两个字符串之间的个数,长度为4:abcd、aced的个数。
3 4 private static int process(String str1, String str2, int len1, int len2) { 5 char[] ch1 = str1.toCharArray(); 6 char[] ch2 = str2.toCharArray(); 7 long res = 0; 8 for (int i = len1; i <= len2; i++) { 9 char a = ch1[0]; 10 char b = ch2[0]; 11 res += (long) Math.pow(26, i - 1) * (b - a); 12 long suma = 0; 13 long sumb = 0; 14 for (int j = 1; j < ch1.length; j++)// 找到比ch1剩余字符串小的字符串个数 15 { 16 suma = suma + (ch1[j] - ‘a‘) * (long) Math.pow(26, i - 1 - j); 17 } 18 for (int j = 1; j < ch2.length; j++)// 找到比ch2剩余字符串小的字符串个数 19 { 20 sumb = sumb + (ch2[j] - ‘a‘) * (long) Math.pow(26, i - 1 - j); 21 } 22 res = res + sumb - suma; 23 } 24 res--; 25 res= res % 1000007; 26 return (int) res; 27 }
标签:ring mod ace text 大于 item log 计算 return
原文地址:http://www.cnblogs.com/Renyi-Fan/p/7728526.html