【ACM】华为oj---最长公共子串计算
2015-08-25 14:44
225 查看
题目描述:
计算两个字符串的最大公共字串的长度,字符不区分大小写详细描述:接口说明原型:int getCommonStrLength(char * pFirstStr, char * pSecondStr);输入参数: char * pFirstStr //第一个字符串 char * pSecondStr//第二个字符串
输入:
输入两个字符串
输出:
一个整数
样例
asdfas
werasdfaswer
6
分析:计算最长公共子串,区别于最长公共子序列,子串要求位置是连续的。同样利用动态规划的思想。用一个二维数组c[][]来记录两个串的情况,
转移方程为:
如果s1[i]==s2[j],则c[i][j]=c[i-1][j-1]+1
如果s1[i]!=s2[j],则c[i][j]=0
但是要注意一点,本题中不区分大小写,所以上述方程改为
如果s1[i]==s2[j]
|| abs(s1[i]-s2[j])==32,则c[i][j]=c[i-1][j-1]+1
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <stdlib.h>
#define MAX_N 500
using namespace std;
int LCS(char *s1,char *s2)
{
int len1,len2,i,j,maxlen=0;
int c[MAX_N][MAX_N]={0};
len1=strlen(s1);
len2=strlen(s2);
for(i=1;i<len1+1;i++)
{
for(j=1;j<len2+1;j++)
{
if(s1[i-1]==s2[j-1]||(abs(s1[i-1]-s2[j-1])==32))
{
c[i][j]=c[i-1][j-1]+1;
}
if(c[i][j]>maxlen)
maxlen=c[i][j];
}
}
return maxlen;
}
int main()
{
freopen("in.txt","r",stdin);
char str1[MAX_N],str2[MAX_N];
scanf("%s",str1);
scanf("%s",str2);
int LCSlen;
LCSlen=LCS(str1, str2);
printf("%d\n",LCSlen);
}
4000
计算两个字符串的最大公共字串的长度,字符不区分大小写详细描述:接口说明原型:int getCommonStrLength(char * pFirstStr, char * pSecondStr);输入参数: char * pFirstStr //第一个字符串 char * pSecondStr//第二个字符串
输入:
输入两个字符串
输出:
一个整数
样例
asdfas
werasdfaswer
6
分析:计算最长公共子串,区别于最长公共子序列,子串要求位置是连续的。同样利用动态规划的思想。用一个二维数组c[][]来记录两个串的情况,
转移方程为:
如果s1[i]==s2[j],则c[i][j]=c[i-1][j-1]+1
如果s1[i]!=s2[j],则c[i][j]=0
但是要注意一点,本题中不区分大小写,所以上述方程改为
如果s1[i]==s2[j]
|| abs(s1[i]-s2[j])==32,则c[i][j]=c[i-1][j-1]+1
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <stdlib.h>
#define MAX_N 500
using namespace std;
int LCS(char *s1,char *s2)
{
int len1,len2,i,j,maxlen=0;
int c[MAX_N][MAX_N]={0};
len1=strlen(s1);
len2=strlen(s2);
for(i=1;i<len1+1;i++)
{
for(j=1;j<len2+1;j++)
{
if(s1[i-1]==s2[j-1]||(abs(s1[i-1]-s2[j-1])==32))
{
c[i][j]=c[i-1][j-1]+1;
}
if(c[i][j]>maxlen)
maxlen=c[i][j];
}
}
return maxlen;
}
int main()
{
freopen("in.txt","r",stdin);
char str1[MAX_N],str2[MAX_N];
scanf("%s",str1);
scanf("%s",str2);
int LCSlen;
LCSlen=LCS(str1, str2);
printf("%d\n",LCSlen);
}
4000
相关文章推荐
- Serialize/Unserialize破坏单例
- Kafka 分布式消息系统详解
- 国外程序员常去的14个开发社区
- iOS第三方框架集合
- scrollview中嵌套viewpager出现的兼容问题
- Java字符串中判断是否有汉字
- 多线程下面日志输出-线程安全-消息队列循环输出
- ZT一篇从普华永道离开的人的文章:闲话我在普华永道的岁月
- PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法
- 百度搜索URL参数含义
- BA-风阀水阀执行器接线图
- SQL RIGHT JOIN 关键字
- Ubuntu 14.04笔记本开机屏幕亮度调节
- 关于QSocket的释放的一个需要注意的情况
- 到底这些配置有哪些是可以自己后期加装的,而哪些又是无法自己后期加装的呢?可以后装加的配置是否比原装的要划算呢?
- 从今天开始,继续写一些技术类博客,分享给大家。
- HDU 1051 Wooden Sticks (贪心)
- OPENCV VS设置
- Robot Framework 教程 (5) - 连接Oracel数据库
- 小试Express