字符串组合问题
来源:互联网 发布:淘宝一直没流量怎么办 编辑:程序博客网 时间:2024/05/09 08:11
给两个串A[1..m]和B[1..n],现在要把B插入到A中,也就是说,得到一个A[1..p]B[1..n]A[p+1..m]的形式,也可以把B放到A的最前面或最后面。问能得到的字典序最小的串。
B插入A总共有m+1中方式,每种方式对应于一个[0..m]间的数字(0表示插入在最前面,i表示插入在A[i]之后)。定义F(i,j) 为A[i..m]与B[j..n]的组合中字典序最小的串对应的那个数字(值域[0..m-i+1])。求F(1,1)∈[0..m]的值。
以A[1..3]和B[1..4]为例,共有如下4中组合:
0 : b1 b2 b3 b4 a1 a2 a3
1 : a1 b1 b2 b3 b4 a2 a3
2 : a1 a2 b1 b2 b3 b4 a3
3 : a1 a2 a3 b1 b2 b3 b4
- 如果b1<a1则结果为F(1,1)=0;
- 如果b1>a1则可以递归为求解1,2,3中的最小串,等价于A[2..3]和B[1..4]的最小串的序号加1,即F(1,1)=F(2,1)+1;
- 如果b1==a1则可以将上图中b1替换成a1得到下图,可见结果等价于A[1..3]和B[2..4]的组合,即F(1,1)=F(1,2);
0 : a1 b2 b3 b4 a1 a2 a3
1 : a1 a1 b2 b3 b4 a2 a3
2 : a1 a2 a1 b2 b3 b4 a3
3 : a1 a2 a3 a1 b2 b3 b4
综上所述,得到一个递归解决该问题的方法:
F(i,j) = 0 if i>m || j>n || a[i]<b[j]
F(i+1, j) + 1 if a[i] > b[j]
F(i, j+1) if a[i] == b[j]
- 字符串组合问题
- 字符串组合问题
- 字符串组合相关问题
- 字符串组合问题
- java字符串、排序组合问题
- 关于字符串组合等地址问题
- 字符串排列和组合的问题
- 字符串组合问题(无重复)
- 字符串全排列和组合问题
- 字符串组合
- 字符串组合
- 字符串组合
- 字符串组合
- 字符串组合
- 字符串组合
- 组合字符串
- 组合字符串
- 字符串组合
- 字符串的相等性和不可变性
- 正交试验法设计测试用例
- 做名安分的程序员,你幸福吗?
- Nullable类型,C#溢出检查,typeof运算符和运算符的重载
- Linux的iptables下的NAT配置
- 字符串组合问题
- 软件工程之一——概述
- C#中的Var—隐式类型
- 斯坦纳树 hdu4085
- 终于搞定CString和string之间转换的问题了
- 小程序赋值
- Can't create handler inside thread that has not called Looper.prepare() 终极解决方法
- shell 函数的应用
- Android开发从入门到精通教程大总结(源码,教程,面试题,书籍,视频)