字符串计数-复杂的动态规划题 解析以及Java代码实现
来源:互联网 发布:linux中rpm是什么意思 编辑:程序博客网 时间:2024/05/18 00:08
题目描述
求字典序在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); } }}
0 0
- 字符串计数-复杂的动态规划题 解析以及Java代码实现
- 字符串计数(动态规划)
- java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串
- 动态规划-美团笔试-字符串计数-恶心的dp
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- JAVA 解析复杂的json字符串
- JAVA 解析复杂的json字符串
- JAVA 解析复杂的json字符串
- java解析复杂的json字符串
- JAVA 解析复杂的json字符串
- java 解析复杂的json字符串
- JAVA 解析复杂的json字符串
- 动态规划的典型分析与代码实现----主java
- 复杂状态的动态规划
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 如何搭建完整的手机视频直播系统
- ajax(json)请求发送至后台的接收处理
- Qt事件循环、IO、基于libev的Qt事件循环
- 微信小程序开发之checkbox以及js数据配置和事件处理
- 学习与使用 PRINCE2项目管理方法的收益——上海信息化培训中心
- 字符串计数-复杂的动态规划题 解析以及Java代码实现
- fanxuan
- hadoop 学习笔记:mapreduce框架详解
- 微信支付JSAPI模式及退款CodeIgniter集成篇
- 关于Error.captureStackTrace
- CocoPod的安装使用
- 深入JVM类加载器
- 在foreach中使用key($array)
- Twitter的开源自动化测试工具diff