lintcode :longest common substring 最长公共子串
2016-01-15 20:03
555 查看
题目
样例
给出A=“ABCD”,B=“CBCE”,返回 2
注意
子串的字符应该连续的出现在原字符串中,这与子序列有所不同。
解题
注意:
子序列:这个序列不是在原字符串中连续的位置,而是有间隔的,如:ABCDE 和AMBMCMDMEM 最长公共子序列是ADCDE
子串:子串一定在原来字符串中连续存在的。如:ABCDEF 和SSSABCDOOOO最长公共子串是ABCD
参考链接,讲解很详细
根据子串定义,暴力破解
Java Code
上面的动态规划解法是在求出数组的同时求对角线上1的个数,上面的分开计算更容易理解,更容易想到动态规划的解法。
上面博客还要其他方法,待更新。。。
最长公共子串
给出两个字符串,找到最长公共子串,并返回其长度。样例
给出A=“ABCD”,B=“CBCE”,返回 2
注意
子串的字符应该连续的出现在原字符串中,这与子序列有所不同。
解题
注意:
子序列:这个序列不是在原字符串中连续的位置,而是有间隔的,如:ABCDE 和AMBMCMDMEM 最长公共子序列是ADCDE
子串:子串一定在原来字符串中连续存在的。如:ABCDEF 和SSSABCDOOOO最长公共子串是ABCD
参考链接,讲解很详细
根据子串定义,暴力破解
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common substring. */ public int longestCommonSubstring(String A, String B) { // write your code here if(A == null || B == null ||A.length() ==0 || B.length() ==0) return 0; int lenA = A.length(); int lenB = B.length(); int [][] C = new int[lenA ][lenB ]; int longest = -1; for(int i=0;i<lenA;i++){ for(int j= 0;j< lenB;j++){ char ch1 = A.charAt(i); char ch2 = B.charAt(j); if( ch1 == ch2){ C[i][j] = 1; }else{ C[i][j] = 0; } } } for(int i =0;i< lenA;i++){ for(int j=0;j<lenB;j++){ int m = i; int n = j; int sublongest = 0; while(m<lenA && n <lenB){ if(C[m] ==1){ sublongest +=1; m++; n++; }else{ break; } } longest = Math.max(longest,sublongest); } } return longest; } }
Java Code
上面的动态规划解法是在求出数组的同时求对角线上1的个数,上面的分开计算更容易理解,更容易想到动态规划的解法。
上面博客还要其他方法,待更新。。。
相关文章推荐
- [POJ 2010]Moo University - Financial Aid[优先队列]
- B. Drazil and His Happy Friends
- POJ 1611 The Suspects
- canvas--绘制路径
- LightOJ1348 树链剖分
- Max-heap && Min-heap && push_heap
- FZU2082树链剖分
- leetcode--Search a 2D Matrix
- ssh能够连接而sftp不能连接的解决方法
- 怎样理解最小二乘法原理及其用途
- POJ 1287 Networking
- 位运算函数实现float型变量取整数位
- Java对象的强、软、弱和虚引用原理+结合ReferenceQueue对象构造Java对象的高速缓存器
- Windows 下使用命令行编译C/C++文件
- HYSBZ1036 树链剖分
- 【手把手教你全文检索】Lucene索引的【增、删、改、查】
- Android AppWidget控制手机上网APN接入点
- Mysql 中 if 的 用法
- Codeforces Round #339 (Div. 2) B. Gena's Code 水题
- poj3237 树链剖分 暴力