输入3个子串, 输出这3个子串的最大公共子串 。
2018-03-14 18:50
183 查看
#include<cstdio> #include<iostream> #include<map> #include<vector> #include<cstring> #include<string> #include<algorithm> using namespace std; const int maxn=35; char s1[maxn],s2[maxn],s3[maxn]; string dp[maxn][maxn][maxn]; int main(){ cin>>(s1+1)>>(s2+1)>>(s3+1); int len1=strlen(s1+1); int len2=strlen(s2+1); int len3=strlen(s3+1); for(int i=0;i<=len1;i++) for(int j=0;j<=len2;j++) for(int k=0;k<=len3;k++){ dp[i][j][0]=""; dp[i][0][k]=""; dp[0][j][k]=""; } for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) for(int k=1;k<=len3;k++) { if(s1[i]==s2[j]&&s1[i]==s3[k]){ dp[i][j][k]=dp[i-1][j-1][k-1]+s1[i]; } else{ int l1=dp[i-1][j][k].length(); int l2=dp[i][j-1][k].length(); int l3=dp[i][j][k-1].length(); if(l1==max(l1,max(l2,l3))){ dp[i][j][k]=dp[i-1][j][k]; } else if(l2==max(l1,max(l2,l3))){ dp[i][j][k]=dp[i][j-1][k]; } else { dp[i][j][k]=dp[i][j][k-1]; } } } cout<<dp[len1][len2][len3]<<endl; return 0; }应该是对的吧,如果有错,请大家不吝指教。
相关文章推荐
- 输入3个子串, 输出这3个子串的最大公共子串
- 输入三个字符串,允许有空格,输出最大公共子串 例如输入: what your name my name is ABC
- 输入一个字符串,输出该字符串中最大对称子串的长度
- 给定字符串A和B,输出A和B中的最大公共子串。
- 最长公共子串问题(可输出多个子串)
- C/C++ | 30-27 给定字符串A和B,输出A和B中的最大公共子串
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- 给定字符串A和B,输出A和B中的最大公共子串。
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。
- 编程题:输入10个整数,输出最大数。
- 找出最小存首位和最大数存末位,写三个函数:输入、输出、处理。
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
- HDU1513(最大公共子串LCS+DP)
- 最大公共子串(C语言实现)
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 第八周 项目3 输入五组学生的姓名和成绩,输出最大值和最小值
- 输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
- 两个字符串的最大公共子串
- 实验六 数组 1、输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标。