小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

基于visual Studio2013解决面试题之1202最大公共字符串




题目



解决代码及点评

/*
	最大公共子字符串
*/
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int longest_common_substring(char *str1, char *str2)
{
	int i, j, k, len1, len2, max, x, y;
	len1 = strlen(str1);
	len2 = strlen(str2);
	int **c = new int*[len1 + 1];
	for (i = 0; i < len1 + 1; i++)
		c[i] = new int[len2 + 1];
	for (i = 0; i < len1 + 1; i++)
		c[i][0] = 0;//第0列都初始化为0
	for (j = 0; j < len2 + 1; j++)
		c[0][j] = 0;//第0行都初始化为0 
	max = -1;
	for (i = 1; i < len1 + 1; i++)
	{
		for (j = 1; j < len2 + 1; j++)
		{
			if (str1[i - 1] == str2[j - 1])//只需要跟左上方的c[i-1][j-1]比较就可以了
				c[i][j] = c[i - 1][j - 1] + 1;
			else//不连续的时候还要跟左边的c[i][j-1]、上边的c[i-1][j]值比较,这里不需要
				c[i][j] = 0;
			if (c[i][j]>max)
			{
				max = c[i][j];
				x = i;
				y = j;
			}
		}
	}
	//输出公共子串
	char s[1000];
	k = max;
	i = x - 1, j = y - 1;
	s[k--] = '\0';
	while (i >= 0 && j >= 0)
	{
		if (str1[i] == str2[j])
		{
			s[k--] = str1[i];
			i--;
			j--;
		}
		else  //只要有一个不相等,就说明相等的公共字符断了,不连续了
			break;
	}
	printf("最长公共子串为:");
	puts(s);
	for (i = 0; i < len1 + 1; i++)//释放动态申请的二维数组
		delete[] c[i];
	delete[] c;
	return max;
}
int main(void)
{
	char str1[1000], str2[1000];
	printf("请输入第一个字符串:");
	gets_s(str1);
	printf("请输入第二个字符串:");
	gets_s(str2);
	int len = longest_common_substring(str1, str2);
	printf("最长公共连续子串的长度为:%d\n", len);
	system("pause");
	return 0;
}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









posted on 2013-12-20 21:54  牛栏山1  阅读(147)  评论(0编辑  收藏  举报

导航