09给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串
来源:互联网 发布:java内存溢出 编辑:程序博客网 时间:2024/05/22 10:25
#include <iostream>#include <stdio.h>#include <string.h>#define N 255using namespace std;/* 本题题目:给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串 本题不能用KMP算法,KMP算法找到额是子串在母串中的位置,即子串是母串的一部分,与本题不一样,不要理解错误了 本解:是用暴力算法求解; 本题获得的启示,就是写一个函数的时候尽量不要写全局变量,否则你这个函数只能在这个程序中使用,别人要调用时根本没法用,比如本题 为什么要传入一个多余的char *s;其实设置一个全局变量start1更好,不用开空间,但是这样别人就在其他程序就想用你的这个函数,就没法 用了,除非他也设置一个全局变量,这样就太麻烦了,不过main函数中的全局变量到无所谓,别人不可能调用你的main函数的;*///返回字符串str1与str2的最大公共子串的长度;int maxSubString(char *str1,char *str2,char *s){ int start1=-1 ; //start1记录相同子串在str1的位置; int longest=0; int str1Long = strlen(str1); int str2Long = strlen(str2); int tempLength = 0; for(int i =0;i<str1Long;++i){ for(int j=0;j<str2Long;++j){ //非常关键的一点,忘记了使用临时的变量来记录i,j值,这样就得不到正确的结果 int n=i,m = j;//m,n是临时变量,用来临时计数的 while(n<str1Long&&m<str2Long){ if (str1[n] == str2[m]){ ++tempLength;//记录临时最长的公共子串的长度 ++n; ++m; } else break; } if(longest < tempLength){ longest = tempLength; start1 = i; } tempLength=0;//记得初始化为0 } } //将最大字符子串赋给s[],因为数据是可以传指针的,所以s[]在main函数也可以用,为什么这么做,就是为了不设置全局变量,达到解耦的目的; for(int i=0;i<longest;++i){ s[i] = str1[start1]; start1++; } return longest;}int main(){ char str1[] = "qweh887kjl" ; //为什么加个scanf输入到str1所指的地址windows就报错呢? //char *str1 ="qweh887kjl" ;// scanf("%s",str1); char str2[] = "wekjlweh887de"; //为什么设置char *s时,传入s会发生windows运行不了呢? char s[N]; int longest =0; longest = maxSubString(str1,str2,s); for(int i = 0;i<longest;++i){ printf("%c",s[i]); } return 0;}
0 0
- 09给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串
- 给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串。
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 面试8之给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成
- 动态规划经典题:给出两个字符串s1和s2,返回其中最大的公共子串
- hdu_2594_求串s1的前缀和串s2后缀最大相同部分
- 给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成
- 求任意两个字符串的最大相同子串
- 比较字符串s1和s2,若s1>s2,输出一个正数,若s1=s2,输出0,若s1<s2,输出一个负数。不用strcpy函数
- squeeze(s1,s2),把字符串s1中与s2字符的相同的部分去掉
- 40.给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 给定s1,s2,s3,发现是否通过s1和s2的交错形成s3。
- 转帖-POJ 2774 后缀数组 题目要求:求s1,s2的最大子串
- 飛飛(八十)(补)请构造String类的加、减运算(s1+s2将两个字符串的连接起来;s1-s2是将s1的尾部空格和s2的前导空格去除后的连接)
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回
- //4.判断一个字符串是否为另外一个字符串旋转之后的字符串。 //例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0. //AABCD左旋
- Mac下修改hosts
- 常用设计者模式---策略模式
- 算法导论 红黑树 学习 删除(四)
- leetcode之AddTwoNumbers
- java中获取当前服务器的Ip地址的方法
- 09给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串
- qcacld-2.0的wlan分析之二
- Java 中的 File 类
- 欢迎使用CSDN-markdown编辑器
- web常用英语词汇
- VSCode c++配置文件
- Activity启动过程分析
- QT学习之路四(信号与槽----通讯录的再次改版)
- C++简单工厂模式(Simple Factory Pattern)实现