华为OJ(查找两个字符串a,b中的最长公共子串)
2015-08-21 16:41
603 查看
描述 | 查找两个字符串a,b中的最长公共子串。 详细描述:查找两个字符串a,b中的最长公共子串。 接口设计及说明: /***************************************************************************** Description : 查找两个字符串a,b中的最长公共子串 Input Param : String stringA, 输入字符串A String stringB, 输入字符串B Output Param : Return Value : 成功返回最大公共子串,失败返回null(如:数据错误) *****************************************************************************/ public static String iQueryMaxCommString(String stringA, String stringB) { /* 在这里实现功能,将结果填入输入数组中*/ return null; } |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入两个字符串 |
输出 | 返回重复出现的字符 |
样例输入 | abcdefghijklmnop abcsafjklmnopqrstuvw |
样例输出 | jklmnop |
#include<iostream> #include<string> using namespace std; int get_lcstring(string,string); int main(void) { string s1,s2; cin>>s1>>s2; get_lcstring(s1,s2); //system("pause"); return 0; } int get_lcstring(string s1,string s2) { int len1=s1.size(); int len2=s2.size(); int len=max(len1,len2); int maxlen=0,index; int **cnt=new int*[len1+1]; for(int i=0;i<=len1;i++) cnt[i]=new int[len2+1]; for(int i=0;i<=len1;i++) for(int j=0;j<=len2;j++) cnt[i][j]=0; for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) if(s1[i-1]==s2[j-1]&&cnt[i][j]<cnt[i-1][j-1]+1) { cnt[i][j]=cnt[i-1][j-1]+1; if(cnt[i][j]>maxlen) { maxlen=cnt[i][j]; index=i-1; } } for(int i=0;i<=len1;i++) delete [] cnt[i]; delete [] cnt; for(int i=maxlen-1;i>=0;i--) cout<<s1[index-i]; return maxlen; }
相关文章推荐
- 【网络编程】之十二、wsaeventselect+线程池 服务器实现
- 导入库和静态库
- myBatis学习笔记(10)——使用拦截器实现分页查询
- git学习——<一>git安装
- [Leetcode] Fraction to Recurring Decimal
- 相片Exif协议
- LCM性质 + 组合数 - HDU 5407 CRB and Candies
- python 之 utf-8编码的秘密
- about单例设计模式&同步
- Matlab中数组元素引用——三种方法
- 2015 Multi-University Training Contest 10 (hdu 5406-5416)数据结构+dp+矩阵快速幂+bitset优化拓扑排序+(dp&树状数组)
- hdu1698Just a Hook
- 使用MyBatis Generator自动创建代码
- python 之 utf-8编码的秘密
- htpasswd建立和更新存储用户名、密码
- 页面中插入flash,并且给flash添加单击事件控制播放,以及获取相关参数.
- 安卓开发中获取短信验证码并自动填写
- 图像金字塔L-K光流法模型的学习(转), 讲解的容易懂
- Fastboot线刷“复活”之刷机心得(二)——线刷刷机
- 通过预加载器提升网页加载速度