微软面试100题 - 56LCS
来源:互联网 发布:2017淘宝大学视频教程 编辑:程序博客网 时间:2024/06/06 02:21
56.最长公共字串(算法、字符串)。
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,
则字符串一称之为字符串二的子串。
注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。
请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,
则输出它们的长度4,并打印任意一个子串。
分析:求最长公共子串(Longest Common Subsequence, LCS)是一道非常经典的动态规划题,
因此一些重视算法的公司像MicroStrategy都把它当作面试题。
package com.interview.algorithm;public class PrintPremutation {/* * 53.字符串的排列(字符串)。题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。当c[i-1] == c2[j-1],取对角线+1。 当c[i-1] != c2[j-1],取上边或则左边的最大值。当i=0,j=0,CLS的长度为0。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。 */public void length(int[][] l, int[][] p, char[] c1, char[] c2){//int[][] l = new int[c1.length+1][c2.length+1];//int[][] p = new int[c1.length+1][c2.length+1];for(int i = 1; i <= c1.length; i++){for(int j = 1; j <= c2.length; j++){if(c1[i-1] == c2[j-1]){l[i][j]=l[i-1][j-1]+1;p[i][j]=1;}else if(l[i-1][j] >= l[i][j-1]){l[i][j] = l[i-1][j];p[i][j] =-1;}else if(l[i-1][j]<l[i][j-1]){l[i][j] = l[i][j-1];p[i][j] = 0;}}}}public void printLCS(int[][] p, char[] c1,int x, char[]c2, int y){if(x==0 || y==0) return;if(p[x][y] == 1){this.printLCS(p, c1, x-1, c2, y-1);System.out.print(c1[x-1]);}else if(p[x][y] == -1){this.printLCS(p, c1, x-1, c2, y);}else if(p[x][y] == 0){this.printLCS(p, c1, x, c2, y-1);}}public static void main(String[] args) {// TODO Auto-generated method stubPrintPremutation print = new PrintPremutation();char[] c1 = "BDCABA".toCharArray();char[] c2 = "ABCBDAB".toCharArray();int[][] l = new int[c1.length+1][c2.length+1];int[][] p = new int[c1.length+1][c2.length+1];print.length(l, p, c1, c2);print.printLCS(p, c1, c1.length, c2, c2.length);//System.out.println(max);}}
0 0
- 微软面试100题 - 56LCS
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 面试宝典--[微软面试100题]
- [转载]微软面试100题
- 微软面试100题链接
- 微软面试100题整理
- [微软面试100题] memmove
- 微软面试100题总结
- 微软面试100题 - 53
- 微软面试100题-60
- 微软面试100题-65
- 微软面试100题-64
- 微软面试100题-66
- 微软面试100题-68
- 使用Callable接口实现多线程
- Android中对SD卡的读取与写入
- TabSiPlus开源代码如何使用
- 《struts2》指定多个配置文件和默认Action
- zookeeper简介
- 微软面试100题 - 56LCS
- 斐波那契博弈
- malloc的内存分配之 malloc(0)的内存分配情况
- 一千行MySQL学习笔记
- 如何内置客制(第三方)的apk到ROM中
- HDOJ 3401 Trade (单调队列优化)
- Android网络开源库-Retrofit(二) 文件上传、下载及进度监听
- Android基础:MD5加密
- 图片超链接