(C#)最大公共子串
来源:互联网 发布:淘宝美工做什么工作的 编辑:程序博客网 时间:2024/06/05 19:03
这道算法题目,见了好多遍了,也没时间好好整理一下。这次稍微看了一点。
首先题目意思是这样的:
两个字符串,求公共的连续子串的最大长度。
例如:s1: abcd s2:bcde 则最大公共子串长度是3
首先,让我们看一下暴力解决:
<span style="font-size:18px;"> static int common(String s1, String s2) { int maxcount = 0; for (int i = 0; i < s1.Length; i++) { for (int j = 0; j < s2.Length; j++) { if (s1[i] == s2[j]) { int tempcount=0; for (int k1 = i,k2=j; k1 < s1.Length && k2<s2.Length; k1++,k2++) { if (s1[k1] == s2[k2]) { tempcount++; } else { break; } } if (tempcount > maxcount) { maxcount = tempcount; } } } } return maxcount; }</span>暴力解决,明显是三层循环啊,所以是O(n^3)
下面,让我们先看一下动态规划的优化第一步:计算len[i][j]=len[i-1][j-1](前提是两个字符相同的情况下)
<span style="font-size:18px;"> static int commonmax(string s1, string s2) { int[,] len=new int[s1.Length,s2.Length]; int max = 0; for (int i = 0; i < s1.Length; i++) { for (int j = 0;j< s2.Length; j++) { if (s1[i] == s2[j]) { if (i == 0 || j == 0) { len[i,j] = 1; if (max < len[i,j]) { max = len[i,j]; } } else { len[i,j] = len[i - 1,j - 1]+1; if (max < len[i,j]) { max = len[i,j]; } } } else { len[i,j] = 0; } } } return max; }</span>
画一个简图看一下:
(s1)
a
b
c
d
0 0
- (C#)最大公共子串
- 最大公共子串(C语言实现)
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 最大公共子串
- 2017 蓝桥杯C/C++B组省赛 最大公共子串
- c 求最大公共子串的实现
- 《算法导论》-最大公共子串(连续) C语言版
- c语言:查找两个字符串的最大公共子串
- 最大公共子序列 vs 最大公共子串
- 最大公共子串&&最大公共子序列
- 求最大公共子串
- 求最大公共子串
- Android学习分享-常见控件02-Button详解
- MongoDB和MySQL性能测试及其结果分析
- 极客班STL第二周学习笔记
- Lua的值与类型
- Android动画使用(二)
- (C#)最大公共子串
- iOS开源库Carthage提交自己的开源库
- oc字符串的处理,字符串的截取,匹配字符串,分隔字符串,字符串的大小写转换,转定义字符串
- cetos sysctl.conf优化参考之一
- hdu 4034 预处理+map映射字符串
- linux的php环境安装php+mysql+nginx
- 单例模式
- OC-视图
- Toast中的setDurition使用不起作用的原因