题目描述:
计算两个字符串的最大公共字串的长度,字符不区分大小写
详细描述:
接口说明
原型:
int getCommonStrLength(char * pFirstStr, char * pSecondStr);
输入参数:
char * pFirstStr //第一个字符串
char * pSecondStr//第二个字符串
输入描述:
输入两个字符串
输出描述:
输出一个整数
输入例子:
asdfas werasdfaswer
输出例子:
6
本题考查知识点:字符串操作、动态规划
本题难度:初级
1.常规做法:Runtimerror,0分
#include <stdio.h>
#include <string.h>
#include "OJ.h"
/*
功能: 计算两个字符串的最大公共字串的长度,字符不区分大小写
输入:char * pFirstStr //第一个字符串
char * pSecondStr //第二个字符串
输出:无
返回:int。最大公共字串的长度
*/
int getCommonStrLength(char * pFirstStr, char * pSecondStr)
{
/*在这里实现功能*/
int len1 = strlen(pFirstStr);
int len2 = strlen(pSecondStr);
int maxStrLength = 0;
int StrLength = 0;
for(int i = 0;i < len1;i++)
{
for(int j = 0;j < len2;j++)
{
if(i == len2 || j == len1)
{
break;
}
while((pFirstStr[i] == pSecondStr[j]) || (pFirstStr[i] == pSecondStr[j]+32) || (pFirstStr[i] == pSecondStr[j]-32))
{
i++;
j++;
StrLength++;
}
if(StrLength > maxStrLength)
{
maxStrLength = StrLength;
}
StrLength = 0;
if(i == len1 || j == len2)
{
break;
}
}
}
return maxStrLength;
}
2.动态规划解法:Runtimeerror,0分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "OJ.h"
#define MAX_N 500
/*
功能: 计算两个字符串的最大公共字串的长度,字符不区分大小写
输入:char * pFirstStr //第一个字符串
char * pSecondStr //第二个字符串
输出:无
返回:int。最大公共字串的长度
*/
int getCommonStrLength(char * pFirstStr, char * pSecondStr)
{
/*在这里实现功能*/
int len1 = strlen(pFirstStr);
int len2 = strlen(pSecondStr);
int maxStrLength = 0;
int c[MAX_N][MAX_N] = {0};//记录最大公共字串的长度
if((NULL == pFirstStr)||(NULL == pSecondStr)) /*防止指针为空*/
{
return -1;
}
for(int i = 1;i < len1+1;i++)
{
for(int j = 1;j < len2+1;j++)
{
if((pFirstStr[i-1] == pSecondStr[j-1]) || abs(pFirstStr[i-1] - pSecondStr[j-1]) == 32)
{
c[i][j] = c[i-1][j-1] + 1;//利用之前保存的最大值,如果不满足条件,置为0
}
if(c[i][j] > maxStrLength)
{
maxStrLength = c[i][j];
}
}
}
return maxStrLength;
}