【字符串处理算法】获取最长公共子串的算法设计及C代码实现
来源:互联网 发布:中华姓氏家谱编辑软件 编辑:程序博客网 时间:2024/06/05 23:40
一、需求描述
输入两个字符串,编写程序获取这两个字符串的第一个最长公共子串。
例如,输入的字符串为“abcdef”和“fecdba”,那么这两个字符串的第一个最长公共子串为“cd”。
二、算法设计
我们可以首先寻找两个字符串中的第一个相等的字符,然后分别向后移动来比较对应位置的字符是否相等。
即如果字符串1为“1234abcd”,字符串2为“abd”,那么首先发现字符串1中的第五个字符“a”与字符串2中的第一个字符“a”相等,接着字符串1中的第六个字符“b”与字符串2中的第二个字符“b”相等,再接着发现字符串1中的第七个字符“c”与字符串2中的第三个字符“d”不相等,此时比较结束。也就是说字符串1和字符串2的最长公共子串为“ab”。
三、特殊流程考虑
在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:
1.如果输入的两个字符串之一含有中文字符,那么程序直接返回而不执行后续流程。
2.如果输入的两个字符串之一含有空格,那么程序获取空格之前的字符串进行后续操作。
四、程序代码
五、程序测试
我们将编写好的程序“GetLCS.c”上传到Linux机器,并使用“gcc -g -o GetLCS GetLCS.c”命令对该程序进行编译,生成“GetLCS”文件。下面对程序进行详细的测试。
1.输入字符串1为“abcdef”,字符串2为“hijkabm”时,程序运行情况如下:
Please input string1:
abcdef
InputStr1=abcdef
Please input string2:
hijkabm
InputStr2=hijkabm
abcdef和hijkabm的最长公共子串是:ab, 其长度是:2
2.输入字符串1为“1234!@#”,字符串2为“5678!@#1”时,程序运行情况如下:
Please input string1:
1234!@#
InputStr1=1234!@#
Please input string2:
5678!@#1
InputStr2=5678!@#1
1234!@#和5678!@#1的最长公共子串是:!@#, 其长度是:3
3.输入字符串1为“123你们好”,字符串2为“123”时,程序运行情况如下:
Please input string1:
123你们好
InputStr1=123你们好
Please input string2:
123
InputStr2=123
123你们好 has Chinese character, pleasecheck!
4.输入字符串1为“123abc”,字符串2为“abd ef”时,程序运行情况如下:
Please input string1:
123abc
InputStr1=123abc
Please input string2:
abd ef
InputStr2=abd
123abc和abd的最长公共子串是:ab, 其长度是:2
5.输入字符串1为“abcdef”,字符串2为“123456”时,程序运行情况如下:
Please input string1:
abcdef
InputStr1=abcdef
Please input string2:
123456
InputStr2=123456
abcdef和123456无公共子串!
六、需求扩展
基于本文中的需求和程序,我们可考虑对需求进行以下扩展:
1.如果两个字符串有多于一个最长公共子串,则都要将它们输出,即如果字符串1为“1234abcd”,字符串2为“abd12”,那么程序输入的最长公共子串为“12”和“ab”。
2.不限制输入字符串中不能出现中文字符,即如果字符串1为“我们123”,字符串2为“我们”,那么最长公共子串为“我们”。
- 【字符串处理算法】获取最长公共子串的算法设计及C代码实现
- 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
- 最长公共子序列求解算法及代码实现
- 【字符串处理算法】字符串包含的算法设计及C代码实现
- 【字符串处理算法】字符串转换为整数的算法设计及C代码实现
- 【字符串处理算法】删除特定的字符的算法设计及C代码实现
- 【字符串处理算法】回文判断的算法设计及C代码实现
- 【每天学点算法题10.15】获取两个字符串之间最长公共子串的长度
- 算法实现-->最长公共子串
- LCS算法实现 求两个字符串中间最长的公共子串
- 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
- 【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现
- 编程算法 - 最长公共子序列(LCS) 代码(C)
- 最长公共子串[算法]
- 获取两个字符串所有公共的子串算法
- 字符串算法之最长公共子序列
- 【算法设计-最长公共子串与最长公共子序列】
- Python实现求两个字符串的最长公共子序列的算法
- 触发Full GC执行的情况 JVM对象分配规则
- 自己实现一个右滑删除的ListView, SwipeMenuListView
- [PHP代码] 用php的fsocket模拟get提交 模拟post提交表单
- matlab下创建带变量的文件夹
- BZOJ 1194: [HNOI2006]潘多拉的盒子
- 【字符串处理算法】获取最长公共子串的算法设计及C代码实现
- <php>学习小记-20160322
- 数字签名与数字证书
- Jena读取Ontology本体到Mysql数据库
- 安卓触摸事件探究
- [PHP代码] php模拟post发送数据
- Android开发之assets目录下资源使用总结
- android关于canvas,path,paint非常好的讲解
- neo4j with 统计