获取两个字符串所有公共的子串算法
来源:互联网 发布:c语言数字后面加u 编辑:程序博客网 时间:2024/06/10 17:50
应用场景: 获取两个字符串所有公共的子串。
思路: 1. 先获取两个子串的交集
2. 遍历交集子串,从最短子串到最长子串
public static List<String> getAllCommonSubStrings(String str1, String str2) { //TODO null check. String longString = str1; String shortString = str2; if(str1.length() < str2.length()){ longString = str2; shortString = str1; } List<String> result = new ArrayList<String>(); List<String> vacancy = new ArrayList<String>(); vacancy.add(""); List<String> list1 = Arrays.asList(shortString.split("")); List<String> list2 = Arrays.asList(longString.split("")); result.addAll(list1); result.retainAll(list2); result.removeAll(vacancy); List<String> commonSubStrings = new ArrayList<String>(); StringBuffer strBuf = new StringBuffer(); for(int i = 0; i < result.size()-1; i++){ strBuf = strBuf.append(result.get(i)); if(shortString.contains(strBuf + result.get(i+1)) && longString.contains(strBuf + result.get(i+1)) && i < result.size()-2){ continue; }else{ commonSubStrings.add(strBuf.toString()); strBuf = new StringBuffer(); } } String tail = commonSubStrings.get(commonSubStrings.size()-1)+ result.get(result.size()-1); if(shortString.contains(tail) && longString.contains(tail)){ commonSubStrings.set(commonSubStrings.size()-1, tail); }else{ commonSubStrings.add(result.get(result.size()-1)); } return commonSubStrings; }
0 0
- 获取两个字符串所有公共的子串算法
- 【每天学点算法题10.15】获取两个字符串之间最长公共子串的长度
- 获取两个字符串之间最长公共子串的长度
- 获取两个字符串中最大的公共子串
- 算法题-两个字符串的最大公共子串
- 两个字符串的最大公共子串
- 两个字符串的最长公共子串
- 求两个字符串的公共子串
- 两个字符串的最长公共子串
- 两个字符串的最长公共子串
- 两个字符串的最长公共子串
- 两个字符串的最大公共子串
- 两个字符串的最长公共子串
- 关于公共子串的分析,求两个字符串中所有公共子串个数,以及最长公共子串和长度。
- 两个或N个字符串最大公共子串算法
- 两个或N个字符串最大公共子串算法
- 两个或N个字符串最大公共子串算法
- 两个或N个字符串最大公共子串算法
- 基于opencv检测斑马鱼重心
- 请求转发与重定向的区别
- Java语法----Java中equals和==的区别
- 数据挖掘十大经典算法学习之Naive Bayes朴素贝叶斯
- 织梦调用指定栏目名称
- 获取两个字符串所有公共的子串算法
- SAP EXCEL OLE常用方法和属性+例子
- Eclipse 一直Building Workspace 的解决办法
- oracle sql 写9乘9
- 2014年年终总结——获得集团优秀员工称号的心得体会
- 匿名管道 父子进程间通信
- 2种方法解决mysql主从不同步 .
- uil的简单常用操作
- MySQL保存jpg图片 测试通过