百度2015测试开发面试:两个字符串的最长公共子序列

来源:互联网 发布:表格怎么剔除重复数据 编辑:程序博客网 时间:2024/06/05 23:56

百度面试碰到的一道题:

给定两个字符串a,b,输出两个字符串的最长公共子序列;

如String a = "abcabcde";String  b = "bcd123bcde",那么二者的最长公共子序列就是"bcde"。


package com.liuhao.acm.exam;public class LongestComSub {public String getLongestComSub(String str1, String str2) {String longestStr = "";// 始终存放最长的子序列int maxLen = 0;// 存放最长子序列的长度for (int i = 0; i < str1.length(); i++) {String tempStr = "";// 存放本次遍历中的最长子序列int tempMax = 0;// 存放本次遍历最长子序列的长度int index = i;// 保存i的副本boolean eq = false;// 标记是否有公共子序列for (int j = 0; j < str2.length(); j++) {// 若当前字符相同,则index++if (index < str1.length() && str1.charAt(index) == str2.charAt(j)) {tempStr += str1.charAt(index);// 将当前字符添加到tempStrindex++;tempMax++;eq = true;// maxLen中总是存放最长序列的长度if (tempMax > maxLen) {maxLen = tempMax;longestStr = tempStr;}}// 若不相等else {// 将第一个字符串的索引指向初始位置index = i;tempStr = "";tempMax = 0;//j要-1,否则会跳掉一个字符if (eq) {j--;}eq = false;}}}return longestStr;}public static void main(String[] args) {String str1 = "aaawwwwwaaaawaaaaaaa";String str2 = "aaawa1aaaaaaa";System.out.println(new LongestComSub().getLongestComSub(str1, str2));}}

代码只返回了一个最长的公共子序列,若存在多个等长的,可以放在一个list里面,然后返回。

0 0
原创粉丝点击