A与B 之间最长的子串
2013-10-30 14:52
295 查看
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] + " ");
}
}
相关文章推荐
- EF调用存储过程遇到的问题
- uva 1328 - Period
- 【原】Activity的LaunchMode和taskAffinity
- Asp.Net alert弹出提示信息的若干种方法
- jeffy-vim配置Vim编辑器
- hadoop,hbase,hive安装全记录(转)
- std::function 和 std::bind
- java内存查看与分析
- TQ2440在linux下的LED驱动程序
- 深入浅出MFC笔记2-MFC程序如何包装Win32程序
- Oracle 11g PL/SQL基础入门系列培训-视频分享
- 射击的乐趣:WIN32诠释打飞机游戏
- Java简单文件传输 socket简单文件传输示例
- iOS常用的开源类库
- uva 10277 - Boastin' Red Socks(概率)
- j2ee中web.xml中配置listener
- centos yum Segmentation fault 问题解决办法
- java使用方法总结
- ssss
- cocos2d-x——使用动画缓存做动画