1.原题是求出最大公共子串的个数就可以

原理:利用二维矩阵排列的方式。将俩字符串进行比較

#include <iostream>
#include <vector>
using namespace std; int prcs_2Strs(const char* s1,const char* s2)
{
int maxSameLength = 0;
int L1 = strlen(s1);
int L2 = strlen(s2);
if(L1==0 || L2==0) //推断字符串是否为空?
return 0; int **c = new int*[L1+1]; //创建矩阵,保存S1与S2各元素比較的结果
for(int i = 0; i < L1+1; i++)
c[i] = new int[L2+1];
for(int i = 0; i < L1+1; i++) //矩阵初始化为0
{
for(int j = 0; j < L2+1; j++)
{ c[i][j]=0; }
}
for(int m =0;m<L1;m++)
{
for(int n=0;n<L2;n++)
{
if(s1[m]==s2[n]) //開始比較
{
//统计比較结果在矩阵 C 中
if((m==0||n==0)) //第一行或者第一列,C[m][n]没有左上角元素,则把它自己置为1
c[m][n]=1;
else
c[m][n]=c[m-1][n-1]+1; //在左上角元素基础上加上1
}
}
}
for(int i = 0; i < L1+1; i++) //找出最大值,赋给maxSameLength
{
for(int j = 0; j < L2+1; j++)
{
if(c[i][j]>maxSameLength)
maxSameLength = c[i][j];
}
}
return maxSameLength;
} int main()
{
char s1[30],s2[30];
cout<<"输入俩字符串:";
cin.getline(s1,30);
cin.getline(s2,30);
cout<<"最大公共子串元素数量为:"<<prcs_2Strs(s1,s2)<<endl;
return 0;
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

2. 统计个数并输出元素

我的思路是将个数和位置存入到一个Vector中。然后输出

#include <iostream>
#include <vector>
using namespace std; vector<int> prcs_2Strs(const char* s1,const char* s2)
{
vector<int> pos;
int maxSameLength = 0;
int L1 = strlen(s1);
int L2 = strlen(s2);
if(L1==0 || L2==0) //推断字符串是否为空
return pos; int **c = new int*[L1+1]; //创建矩阵,保存S1与S2各元素比較的结果
for(int i = 0; i < L1+1; i++)
c[i] = new int[L2+1];
for(int i = 0; i < L1+1; i++) //矩阵初始化为0
{
for(int j = 0; j < L2+1; j++)
{ c[i][j]=0; }
} for(int m =0;m<L1;m++)
{
for(int n=0;n<L2;n++)
{
if(s1[m]==s2[n]) //開始比較
{
//统计比較结果在矩阵 C 中
if((m==0||n==0)) //第一行或者第一列,C[m][n]没有左上角元素,则把它自己置为1
c[m][n]=1;
else
c[m][n]=c[m-1][n-1]+1; //在左上角元素基础上加上1
}
}
}
for(int i = 0; i < L1+1; i++) //找出最大值,赋给maxSameLength
{
for(int j = 0; j < L2+1; j++)
{
if(c[i][j]>maxSameLength)
maxSameLength = c[i][j];
}
}
pos.push_back(maxSameLength); for(int i = 0; i < L1+1; i++) //找出最大值的位置
{
for(int j = 0; j < L2+1; j++)
{
if(c[i][j]==maxSameLength)
pos.push_back(i);
}
}
return pos; //终于pos中记录了最大公共子串的长度和在S1中位置
} int main()
{
char s1[30],s2[30];
cout<<"输入俩字符串:";
cin.getline(s1,30);
cin.getline(s2,30);
vector<int> results = prcs_2Strs(s1,s2);
int num = results[0];
int posEnd = results[1];
if(num>0)
{
cout<<"最大公共子串元素数量为:"<<num<<endl;
cout<<"最大公共子串元素:";
for(int a=1;a<=num;a++)
cout<<s1[posEnd-num+a];
}
return 0;
}

【华为OJ平台练习题】求最大公共子串的个数和元素的更多相关文章

  1. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  2. 华为OJ平台——输出最小的k个数

    输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...

  3. 华为OJ平台——矩阵乘法

    题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...

  4. 华为OJ平台——求最大连续bit数

    题目描述: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字    输出: 对应的二进制数字中1的最大连续数 思路: ...

  5. 华为OJ平台——超长正整数相加

    题目描述: 请设计一个算法完成两个超长正整数的加法. 输入 输入两个字符串数字 输出 输出相加后的结果,string型 样例输入 99999999999999999999999999999999999 ...

  6. 华为OJ平台——DNA序列

    题目描述: 一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非 ...

  7. 华为OJ平台——整数的二进制中1的个数

    题目描述: 输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 思路: 这是一道很基本的考查位运算的面试题.包括微软在内的很多公司都曾采用 ...

  8. 华为OJ平台——杨辉三角的变形

    import java.util.Scanner; /** * 杨辉三角的变形 *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的记为0 * 1 * 1 1 1 * 1 2 3 2 1 ...

  9. 华为OJ平台——密码强度等级

    题目描述: 密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分. 一.密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 二.字母: 0  ...

随机推荐

  1. Revit二次开发示例:AutoStamp

    该示例中,在Revit启动时添加打印事件,在打印时向模型添加水印,打印完成后删除该水印.   #region Namespaces using System; using System.Collect ...

  2. 打开tcp_tw_recycle引起的一次投诉分析

    背景: 我们有个基于oauth2.0协议给第三方授权以及信息的业务,年前对接入层.业务层做了次迁移.业务架构简单介绍下: lvs接入---> nginx ---> tomcat   问题: ...

  3. 在Windows上安装FFmpeg程序

    原文地址:http://helloway.blog.51cto.com/7666282/1642247 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它提供了录 ...

  4. BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机 后缀自动机 字符串

    https://www.lydsy.com/JudgeOnline/problem.php?id=3926 广义后缀自动机是一种可以处理好多字符串的一种数据结构(不像后缀自动机只有处理一到两种的时候比 ...

  5. [CC-SUBWAY]Subway Ride

    [CC-SUBWAY]Subway Ride 题目大意: 一棵\(n(n\le5\times10^5)\)个点的含重边的树,总边数为\(m(m\le10^6)\),每条边有一个颜色.\(q(q\le5 ...

  6. [HDU6203]ping ping ping

    题目大意: 给你一棵树,其中有一些点是坏掉的.告诉你k个点对表示这两个点的路径上至少有1个点是坏掉的.问整棵树上至少有多少点是坏的. 思路: 贪心. 找出每组点对的LCA,对所有点对按照LCA的深度排 ...

  7. 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2107  Solved: 820[Submi ...

  8. Codeforces Round #357 (Div. 2) E. Runaway to a Shadow 计算几何

    E. Runaway to a Shadow 题目连接: http://www.codeforces.com/contest/681/problem/E Description Dima is liv ...

  9. GIT(3)----问题汇总

    1.git pull出现的合并问题: Please enter a commit message to explain why this merge is necessary,especially i ...

  10. 关于List Map Set的线程安全的问题

    常见的ArrayList  LinkedList  HashMap TreeMap LinkedHashMap HashSet TreeSet LinkedHashSet 都是线程不安全的.如果要使用 ...