求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
来源:互联网 发布:大数据技术与应用 编辑:程序博客网 时间:2024/06/06 04:33
/**********************************************************************************************************************************************
* 题目描述:
* 求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
输入描述:
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)
输入例子:
ab ce 1 2
输出例子:
56
* 题目描述:
* 求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
输入描述:
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)
输入例子:
ab ce 1 2
输出例子:
56
*******************************************************************************************************************************************/
实现代码:
public static void test11(){Scanner sc=new Scanner(System.in); String s1=sc.next(); String s2=sc.next(); int len1=sc.nextInt(); int len2=sc.nextInt(); System.out.println(countTest(s1,s2,len1,len2));}public static int countTest(String s1,String s2,int len1,int len2){char t_s1[];//排序在后面的字串char t_s2[];//排序在前面的字串//保证t_s1中存放的是字典书序靠前的字符串,t_s2是靠后的字符串if(s1.compareTo(s2)<0)//s1排序位于s2之前{t_s1=s1.toCharArray();t_s2=s2.toCharArray();}else{t_s1=s2.toCharArray();t_s2=s1.toCharArray();}int num=0;int len;for(int j=len1;j<=len2;j++){len=j;if(t_s1.length==t_s2.length){num+=countAB(t_s1,t_s2,len);if(len<Math.min(t_s1.length, t_s2.length))//当之间字符串的长度小于len,排序靠后字串属于中间的数,需要+1num=num+1;}else if(t_s1.length<t_s2.length)//排序靠前的字串短{char temp_s[]=new char[len];if(len>=s1.length()){for(int i=0;i<t_s1.length;i++){temp_s[i]=t_s1[i];}for(int i=t_s1.length;i<len;i++){temp_s[i]='a';}}else{for(int i=0;i<len;i++){temp_s[i]=t_s1[i];}}num+=countAB(temp_s,t_s2,len);if(len==t_s2.length||len==t_s1.length||len<Math.min(t_s1.length, t_s2.length))//当之间字符串的长度小于len,排序靠后字串属于中间的数,需要+1num=num+1;else if(len>Math.min(t_s1.length, t_s2.length)&&len<Math.max(t_s1.length, t_s2.length)){num=num+2;//因为两端的值可以取到}}else if(t_s1.length>t_s2.length)//排序靠前的字串长{char temp_s[]=new char[len];if(len>=t_s2.length){for(int i=0;i<t_s2.length;i++){temp_s[i]=t_s2[i];}for(int i=t_s2.length;i<len;i++){temp_s[i]='a';}}else{for(int i=0;i<len;i++){temp_s[i]=t_s2[i];}}num+=countAB(t_s1,temp_s,len);if(len<Math.min(t_s1.length, t_s2.length))//当之间字符串的长度小于len,排序靠后字串属于中间的数,需要+1num=num+1;}}return num;}public static int countAB(char []s1,char []s2,int len){int num=0;len=len-1;//从长度变换成索引的边界int c=0;//来自低位的借位int c1=0;//向高位的借位int base=1;while(len>=0){if(s2[len]-s1[len]+c>=0) c1=0;else c1=-1;if(c1==0)//没有向高位借位{num=num+(s2[len]-s1[len]+c)*base;}else{num=num+(s2[len]-s1[len]+26+c)*base;}len--;base=base*26;c=c1;//更新来自低位的借位}num=num-1;//中间的个数,差值减1return num>0?num:0;//可能出现两个字串完全一样}
阅读全文
0 0
- 求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
- C 在一个字串s1中查找一子串s2,若存在则返回s1中s2的个数和位置
- 统计s2字符串在s1字符串出现的次数
- 编写函数any(s1,s2),将字符串s2中任一字符在字符串s1中第一次出现的位置作为结果返回。
- 练习2-5 编写函数any(s1,s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回
- 练习2-5 编写函数any(s1,s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2的字符,则返回-1。
- 练习 2-5 编写函数 any(s1, s2),将字符串 s2 中的任一字符在字符串 s1 中第一次 出现的位置作为结果返回。如果 s1 中不包含 s2 中的字符,则返回-1。
- 练习 2-5 编写函数 any(s1, s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。
- 练习 2-5 编写函数 any(s1, s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。
- 练习 2-5 编写函数 any(s1, s2),将字符串 s2 中的任一字符在字符串 s1 中第一次 出现的位置作为结果返回。如果 s1 中不包含 s2 中的字符,则返回-1
- 40.给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 对比两个数组,如何得出s2中包含s1的数以及在s2中出现的个数,放入到二维数组s3中。
- 计算两个字符串间符合字典序且在一定长度内的字符串个数
- MySQL填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)
- C语言程序设计——在字符串S1查找字符串S2出现次数的函数
- 在S1字符串中删除S2字符串出现过的任意字符
- 编写一个函数,有两个参数function(string s1,string s2),找出字符串中s1中s2的个数
- HttpClient4.5 get访问实例
- C++:采用添加资源的方式将模型文件悄悄封入dll
- c语言入门经典必背18个程序
- 51Nod
- 如何让VC++6.0程序具有XP风格
- 求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
- Nodejs起步
- 【学习笔记】熟悉使用Visual Studio Code的快捷键
- SpringMVC 源代码深度解析BeanWrapper及其实现
- Redis操作一(curd)
- 交换两个变量的值,不使用第三个变量
- UVA10954
- 欢迎使用CSDN-markdown编辑器
- R在市场调查中的应用--探索性因子分析(EFA)