计算a、b字符串的不连续公共子串的长度(包含c字符串) ----hdu4681
来源:互联网 发布:加拿大和中国知乎 编辑:程序博客网 时间:2024/06/08 07:45
题意:
给你字符串A,B,C,让你找一个字符串D,使得D串是A,B的字串,C串是D的连续字串。
做法:
找出C串在A,B串的位置。
对于每一个位置对,D串的长度为前一半的最长公共子序列+C串的长度+后一半的最长公共子序列
#include <iostream>#include <cstdio>#include <cstring>#define N 1005#define Max(a,b) a>b?a:busing namespace std;int len1,len2,len3,num;int dp1[N][N],dp2[N][N],pp[N<<2][2];//dp1[][]表示字符串a,b从前往后的最大公共子串,dp2[][]表示字符串a,b从后往前的最大公共子串//pp[][]记录字符串c在a,b中出现的第一个位置和最后一个位置char a[N],b[N],c[N];void solve(char *str,int n){ int i,j,k; int l=strlen(str); for(i=0; i<=l-len3; i++) if(str[i]==c[0]) { for(j=i,k=0; j<n&&k<len3; j++) if(str[j]==c[k]) k++; if(k==len3) { pp[num][0]=i+1; pp[num][1]=j; num++; } else break; }}int main(){ int i,j,T,Count=0; scanf("%d",&T); getchar(); while(T--) { gets(a); len1=strlen(a); gets(b); len2=strlen(b); gets(c); len3=strlen(c); memset(dp1,0,sizeof(dp1)); for(i=1; i<=len1; i++) for(j=1; j<=len2; j++) if(a[i-1]==b[j-1])dp1[i][j]=dp1[i-1][j-1]+1; else dp1[i][j]=Max(dp1[i-1][j],dp1[i][j-1]); memset(dp2,0,sizeof(dp2)); for(i=len1; i>=1; i--) for(j=len2; j>=1; j--) if(a[i-1]==b[j-1])dp2[i][j]=dp2[i+1][j+1]+1; else dp2[i][j]=Max(dp2[i+1][j],dp2[i][j+1]); int x,y; num=0; solve(a,len1); x=num; solve(b,len2); y=num-x; int ans=0; for(i=0; i<x; i++) for(j=0; j<y; j++) ans=Max(ans,dp1[pp[i][0]-1][pp[x+j][0]-1]+dp2[pp[i][1]+1][pp[x+j][1]+1]); printf("Case #%d: %d\n",++Count,ans+len3); } return 0;}
0 0
- 计算a、b字符串的不连续公共子串的长度(包含c字符串) ----hdu4681
- 从字符串S中找出不包含重复字符的最大连续子字符串长度
- 求两个字符串的最大公共子序列(可以不连续)的长度,并输出这个子序列
- 计算两个字符串的最大公共字串的长度,字符不区分大小写(要求计算连续最长字串的长度)
- 查找两个字符串a,b的最长公共子串
- 两个字符串的最长公共子序列(可以不连续)
- 两个字符串的最小公共子串(连续)
- 字符串操作:两个字符串的最长连续公共子串
- Leetcode-字符串问题--最长的公共子字符串长度--可不连续--#583
- 两个字符串的最大公共子长度
- 华为OJ 公共字串计算&&查找两个字符串a,b中的最长公共子串
- 求两个字符串的最长的连续公共子串
- 求两个字符串的最长的连续公共子串
- 求两个字符串的最长的连续公共子串
- 求两个字符串的最长的连续公共子串
- 字符串中不重复连续字符子串的长度最大值
- 多个字符串的公共最长连续子串(对两个字符串的扩展)
- 求字符串中不包含重复字符的最长子串的长度
- Activity生命周期
- 项目中AppDelegate详解
- 使用php scandir()函数遍历文件夹并输出所有文件路径
- 【2014 Esri开发者大会精彩看点】ArcGIS 10.2.2 Native开发产品新特性【下】
- 矩阵微分
- 计算a、b字符串的不连续公共子串的长度(包含c字符串) ----hdu4681
- 关于产品的一些思考——淘友天下之觅觅
- 这时可以借助微软网盘OneDrive的技
- 《30天自制操作系统》学习笔记——暂停
- VS2010不能将参数 1 从“std::string”转换为“const char *”解决
- hibernate连接mysql数据库自动插入数据
- POJ1611 The Suspects
- MFC中一些函数的用法
- Flex4.5+Eclipse3.6+blazeds+tomact6.0+JDK1.6集成