7-2 jmu-ds-最长公共子串 (10分)
给出2个字符串,输出2字符串的最长公共子串。

输入格式:
输入2个字符串,不可包含空格。

输出格式:
输出2个字符串的最长公共子串。若没有公共子串,则输出“NULL”

输入样例1:
abcding
sbcdiofng
输出样例1:
bcdi
输入样例2:
understanding
fw
输出样例2:
NULL

#include <iostream>
#include <string>typedef struct MyString* StrPoint;
struct MyString{char data;StrPoint Link;
};
class Array1{private:StrPoint Front,Rear;int Length,MaxInit,MaxLength;
public:Array1(){this->Length=0;this->Front=(StrPoint)malloc(sizeof(struct MyString));this->Rear=Front;this->Front->Link=NULL;this->Length=0;}void FindMaxSequence(){if(this->Front->Link==NULL){std::cout<<"NULL\n";return;}StrPoint InitP=this->Front;this->MaxInit=0;this->MaxLength=0;int TempInitNum=0;int i=0;for(i=this->MaxInit;i<this->Length;i++){if(InitP->data>=48&&InitP->data<=57){TempInitNum++;if(TempInitNum>this->MaxLength){this->MaxLength=TempInitNum;this->MaxInit=i-TempInitNum;}} else{TempInitNum=0;}InitP=InitP->Link;}std::cout<<this->MaxInit+1<<" "<<this->MaxLength<<"\n";}StrPoint InputString(){char ch1;ch1=getchar();while(ch1!='\n'){this->Rear->data=ch1;StrPoint NewStrP=(StrPoint)malloc(sizeof(struct MyString));NewStrP->Link=NULL;this->Rear->Link=NewStrP;this->Rear=NewStrP;ch1=getchar();this->Length++;}return this->Front;}void StrOutPutString(StrPoint P){while (P->Link!=NULL){std::cout<<P->data<<" \n";P=P->Link;}}int GetLength(){return this->Length;}StrPoint GetFrontPoint(){return this->Front;}
};
class SequenceSaver{public:StrPoint P1;StrPoint P2;int StrNum;SequenceSaver(){P1=(StrPoint)malloc(sizeof(struct MyString));P2=(StrPoint)malloc(sizeof(struct MyString));P1->Link=NULL;P2->Link=NULL;StrNum=0;}void PrintNode(){if(this->StrNum==0){std::cout<<"NULL\n";return;}for(;P1!=P2;P1=P1->Link){std::cout<<P1->data;}}
};
void FindMaxSequence(Array1* arr1,Array1* arr2){Array1* TempPmin=(arr1->GetLength()<arr2->GetLength())?arr1:arr2;Array1* TempPmax=(arr1->GetLength()>arr2->GetLength())?arr1:arr2;StrPoint StrMin=TempPmin->GetFrontPoint();StrPoint StrMax=TempPmax->GetFrontPoint();SequenceSaver* SePointer=new SequenceSaver();SePointer->StrNum=0;for(;StrMin->Link!=NULL;StrMin=StrMin->Link){for(StrPoint StrMax2=StrMax;StrMax2->Link!=NULL;StrMax2=StrMax2->Link){StrPoint StrMinCopy=StrMin;StrPoint StrMaxCopy=StrMax2;int StrNum=0;while (StrMaxCopy->data==StrMinCopy->data){StrNum++;StrMaxCopy=StrMaxCopy->Link;StrMinCopy=StrMinCopy->Link;if((StrMaxCopy==NULL&&StrMinCopy==NULL)||(StrMaxCopy->data!=StrMinCopy->data)){if(StrNum>SePointer->StrNum){SePointer->StrNum=StrNum;SePointer->P1=StrMin;SePointer->P2=StrMinCopy;}break;}}}}SePointer->PrintNode();
}
int main() {Array1* arr1=new Array1();Array1* arr2=new Array1();arr2->InputString();arr1->InputString();FindMaxSequence(arr1,arr2);
}

沈阳师范大学-PTA-数据结构-7-2 jmu-ds-最长公共子串相关推荐

  1. 沈阳师范大学PTA百题刷分

    沈阳师范大学PTA百题刷分 6-1 函数选择法排序 (10分) 用选择法对数组a 进行由小到大的排序. 函数接口定义: void fun(int a[],int n) 其中a和n都是用户传入的参数,函 ...

  2. 数据结构课程设计---最长公共子串

    数据结构课程设计,由用户输入两个字符串串X和Y,再由用户输入一个任意的字符串Z,实现以下功能: ①如果字符串Z是字符串X的子串,则显示Z在X中的位置并记录,如果字符串Z是字符串Y的子串,则显示Z在Y中 ...

  3. 【恋上数据结构】动态规划(找零钱、最大连续子序列和、最长上升子序列、最长公共子序列、最长公共子串、0-1背包)

    动态规划(Dynamic Programming) 练习1:找零钱 找零钱 - 暴力递归 找零钱 - 记忆化搜索 找零钱 - 递推 思考题:输出找零钱的具体方案(具体是用了哪些面值的硬币) 找零钱 - ...

  4. python【数据结构与算法】最长公共子串详解(附代码)

    文章目录 1 定义 1 定义 和最长公共子序列一样,使用动态规划的算法. 下一步就要找到状态之间的转换方程. 和LCS问题唯一不同的地方在于当A[i] != B[j]时,res[i][j]就直接等于0 ...

  5. 常考数据结构与算法:最长公共子串

    题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 示例1 输入 "1AB2345CD","1 ...

  6. Java语言矩形与立方体的继承,沈阳师范大学大一下册C++语言PTA题目集以及答案(编程题篇)...

    沈阳师范大学大一下册C++语言PTA题目集以及答案 (编程题篇) 7-1 测试c++ (20分) 倒序输出从控制台输入的n个整数 输入格式: 第一行输入一个数n,代表行数 依次输入n个整数 输出格式: ...

  7. 沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 编程题篇)

    沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 编程题篇) 7-1 求阶乘序列前N项和 (15分) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式 ...

  8. 沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 函数题篇)

    沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 函数题篇) 6-1 字符串的连接 (15分) 本题要求实现一个函数,将两个字符串连接起来. 函数接口定义: char *str_cat( ...

  9. 沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇)

    沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇) 7-1 输出学生成绩 (20分) 本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩.最高成绩和最低成绩.建议使用 ...

最新文章

  1. python实现排序_python实现以及所有排序大总结【转】
  2. php如何测量坐标周围,php – 如何检查经度/纬度点是否在坐标范围内?
  3. Netflix监管者测试–引入了知事-Junit-runner
  4. idea复制java_IntelliJ IDEA的剪切、复制和粘贴
  5. mysql blgg__MySQL_exceptions.ProgrammingError:(2014,“命令不同步;您现在无法运行此命令”)?...
  6. Class.forName()、Class.class、getClass() 区别
  7. [Node.js] 模块化 -- NodeJS之heroAdmin后台管理系统基础
  8. java解析csv文件写入mysql_java读取cvs文件并导入数据库
  9. 如果你现在很穷,很苦,不要苦恼
  10. android开发微博前的包准备,新浪微博开发之前期准备篇
  11. 【Storm总结-6】Twitter Storm: DRPC简介
  12. 关于破解Quartus
  13. 以太网驱动详解之 MAC、MII、PHY 详解
  14. React脚手架搭建及创建React项目
  15. 华为云空间兑换码在哪里找_华为云空间在哪里找到
  16. 什么是devicenet跟以太网啥区别
  17. SitePoint播客#67:浏览器之舞
  18. Vue3前端项目加载使用腾讯地图
  19. 软件设计师考试重点知识点梳理
  20. poj-2251 Dungeon Master【bfs】

热门文章

  1. Ubuntu Nautilus文件管理器显示地址栏
  2. 高效绘图、图像IO以及图层性能
  3. mysql随机生成数据并插入_mysql随机数据生成并插入
  4. Java FX swt_DOC-13-08 JavaFX与SWT的协作性
  5. SAP Activate方法论
  6. canvas绘制微信海报分享
  7. 7-171 打擂法找最大的数
  8. ubuntu返回图形界面_虚拟机+Ubuntu 图形界面和终端界面的切换
  9. MSSQL 2005数据库转到SQL 2000的步骤讲解
  10. java 不能实例化类型_java不能实例化类型