A与B 之间最长的子串
来源:互联网 发布:fda医疗器械数据库 编辑:程序博客网 时间:2024/04/28 21:15
publicvoid GetComStrs(string str1, string str2)
{
///矩阵法求出最长公共子字符串
///第一步:填充矩阵数组,填充规则是
///1、纵横坐标上的字符不相同相同,此位置值为0;
///2、纵横坐标上的字符相同,此位置值为右上方位置的值加1(如果没有右上方位置,即纵横坐标有一个为0时,此位置值为1)
///第二步:扫描矩阵数组,找到最大值maxLength
///第三步:再次扫描矩阵数组,以值为maxLength的位置为基准,通过一个循环拼接字符并赋给comstr
///最后将拼接的字符串添加到列表中
List<string> comStrs = newList<string>();
string comStr = "";
int maxLength = 0;
int[,] arr = newint[str1.Length, str2.Length];
int i, j, k;
//嵌套循环给矩阵赋值
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (str1[i] == str2[j])
{
if (i == 0 || j == 0)
{
arr[i, j] = 1;
}
else
{
arr[i, j] = arr[i - 1, j - 1] + 1; //累加
}
}
else
{
arr[i, j] = 0;
}
}
}
//嵌套循环找到最长子字符串的字符数
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (arr[i, j] > maxLength)
{
maxLength = arr[i, j];
}
}
}
//嵌套循环取出最长的子字符串
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (arr[i, j] == maxLength)
{
comStr = "";
for (k = 0; k < maxLength; k++)
{
comStr += str2[j - maxLength + k + 1];
}
comStrs.Add(comStr); //找到后放入列表中
}
}
}
//打印最长公共子字符串
for (i = 0; i < comStrs.Count; i++)
{
Console.Write(comStrs[i] + " ");
}
}
{
///矩阵法求出最长公共子字符串
///第一步:填充矩阵数组,填充规则是
///1、纵横坐标上的字符不相同相同,此位置值为0;
///2、纵横坐标上的字符相同,此位置值为右上方位置的值加1(如果没有右上方位置,即纵横坐标有一个为0时,此位置值为1)
///第二步:扫描矩阵数组,找到最大值maxLength
///第三步:再次扫描矩阵数组,以值为maxLength的位置为基准,通过一个循环拼接字符并赋给comstr
///最后将拼接的字符串添加到列表中
List<string> comStrs = newList<string>();
string comStr = "";
int maxLength = 0;
int[,] arr = newint[str1.Length, str2.Length];
int i, j, k;
//嵌套循环给矩阵赋值
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (str1[i] == str2[j])
{
if (i == 0 || j == 0)
{
arr[i, j] = 1;
}
else
{
arr[i, j] = arr[i - 1, j - 1] + 1; //累加
}
}
else
{
arr[i, j] = 0;
}
}
}
//嵌套循环找到最长子字符串的字符数
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (arr[i, j] > maxLength)
{
maxLength = arr[i, j];
}
}
}
//嵌套循环取出最长的子字符串
for (i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (arr[i, j] == maxLength)
{
comStr = "";
for (k = 0; k < maxLength; k++)
{
comStr += str2[j - maxLength + k + 1];
}
comStrs.Add(comStr); //找到后放入列表中
}
}
}
//打印最长公共子字符串
for (i = 0; i < comStrs.Count; i++)
{
Console.Write(comStrs[i] + " ");
}
}
- A与B 之间最长的子串
- 查找两个字符串a,b的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 求两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 获取两个字符串之间最长公共子串的长度
- 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符
- 动态规划 LCS 求两个序列A,B中所有的最长公共子序列
- 动态规划 LCS 求两个序列A,B中全部的最长公共子序列
- 【codeforces 676C】 【尺取法】【从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度】
- 从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度.【尺取法】
- A + B问题(字符串与数字之间的转换)
- 【华为oj】oj2034查找两个字符串a,b中的最长公共子串
- OpenGL 模型视图变换、投影变换、视口变换
- 输入一个整数,使用递归方法实现反向输出
- VS2010+SharePoint2010 开发及部署TimerJob
- PHP中global,$GLOBALS的比较
- 为什么我的VS2008不报错
- A与B 之间最长的子串
- java泛型之四——上下限
- VC打开制定文件夹
- android4.0.3去掉底部状态栏statusbar,全屏显示示例代码
- jbpm4.4整合spring2.5
- uva 10229 - Modular Fibonacci(矩阵快速幂)
- UVA 991 Safe Salutations
- 如何在vs2010中设置C++ main 函数的实参int main(int argc ,char *argv[])
- "半连接"检测的研究