(79)最长公共子串
2015-10-20 15:09
375 查看
中等 最长公共子串
30%通过
给出两个字符串,找到最长公共子串,并返回其长度。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出A=“ABCD”,B=“CBCE”,返回 2
注意
子串的字符应该连续的出现在原字符串中,这与子序列有所不同。
#include<stdio.h> #include<string.h> #include<stdlib.h> int findthelongest(char s1[],char s2[]) { int max = 0; int i,j; int len1 = strlen(s1); int len2 = strlen(s2); int table[len1+10][len2+10]; for(i=0;i<len2;i++) { if(s1[0]==s2[i]) table[0][i] = 1; else table[0][i] = 0; } for(i=0;i<len1;i++) { table[i][0] = (s1[i]==s2[0]?1:0); } for(i=1;i<len1;i++) { for(j=1;j<len2;j++) { if(s1[i]==s2[j]) table[i][j] = table[i-1][j-1]+1; else{ if(table[i-1][j]>table[i][j-1]) table[i][j] = table[i-1][j]; else table[i][j] = table[i][j-1]; } } } for(i=0;i<len1;i++) { for(j=0;j<len2;j++) if(max<table[i][j]) max = table[i][j]; } return max; } int main() { char s1[10000]; char s2[10000]; while(scanf("%s %s",s1,s2)!=EOF) { int n = findthelongest(s1,s2); printf("%d\n",n); } return 0; }
此题:
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common substring. */ public static int longestCommonSubstring(String A, String B) { char[] s1 = A.toCharArray(); char[] s2 = B.toCharArray(); int len1 = s1.length; int len2 = s2.length; if(len1==0 || len2==0) return 0; int[][] table = new int[len1+5][len2+5]; int i,j,k; for(i=0;i<len2;i++) table[0][i] = (s1[0]==s2[i]?1:0); for(i=0;i<len1;i++) table[i][0] = (s1[i]==s2[0]?1:0); for(i=1;i<len1;i++) { for(j=1;j<len2;j++) { if(s1[i]==s2[j]) table[i][j] = table[i-1][j-1]+1; else table[i][j] = 0; } } int max = table[0][0]; for(i=0;i<len1;i++) for(j=0;j<len2;j++) { if(max<table[i][j]) max = table[i][j]; } return max; } }
相关文章推荐
- 【stack 实现前缀、后缀、中缀表达式运算】
- ASP.NET MVC 必备知识点杂谈
- 入侵指定网站的思路~菜鸟必学
- 获取<meta-data>元素的value属性的值
- 查看MySQL的当前存储引擎
- 家庭作业
- HIbernate基于外键的查询
- POJ 1741 Tree 树的分治
- Android 默认把触摸屏show touches打开
- css浮动
- jenkins maven tomcat做持续集成的时候几个关键配置
- 【Windows10】如何使用Segoe MDL2 Assets图标
- 转屏
- ios 获取当前时间
- 家庭作业2.68 2.70
- JSF生命周期
- 自己动手开发音视频播放器
- Spark与Hadoop关系
- mybatis存储过程调用
- app升级,获取AppStore版本号和本地版本号