字串的连接最长路径查找
2015-08-27 21:50
489 查看
给定n个字串,其中一个字串的后m个字符,是下一个字串的开始。找出所有字串中的能连接起来的最长路径。
样例输入 | ABCC ABCD BCCE BCDE CCEF BCCE CCEG CEGF |
---|---|
样例输出 | ABCCEGF |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine().trim(); String[] arr = input.split(" "); maxCatenate(arr); sc.close(); } public static void maxCatenate(String[] text) { int[][] G = new int[text.length][text.length]; String[][] T = new String[text.length][text.length]; for(int i=0; i<G.length; i++) { String suffix = text[i].substring(1); for(int j=i+1; j<G.length; j++) { if(text[j].indexOf(suffix)==0) { G[i][j] = 1; T[i][j] = text[j].substring(text[j].length()-1); } } } for(int k=0; k<G.length; k++) for(int i=0; i<G.length; i++) for(int j=0; j<G.length; j++) if(G[i][k]!=0&&G[k][j]!=0) { int dist = G[i][k] + G[k][j]; if(dist>G[i][j]) { G[i][j] = dist; T[i][j] = T[i][k] + T[k][j]; } } int max = 0; int start=0; int end=0; for(int i=0; i<G.length; i++) { for(int j=0; j<G.length; j++) { if(max<G[i][j] && i!=j){ max=G[i][j]; start=i; end=j; } } } if(start!=end) { System.out.println(text[start]+T[start][end]); } } }
相关文章推荐
- IOS中的响应者链
- TOMCAT--简单篇
- 黑马程序员——Java基础---IO(一)
- 网络篇 - 06.NSURLSession基本使用
- 人际关系的社会科学
- 有关Web安全测试FAQ
- 在QT Creator中简单的使用UI文件来设计界面并在源码中使用ui文件
- 走进Web开发
- 黑马程序员——30,TCP传输
- idea git 注意事项
- SAP BO DASHBOARD折现图展示问题小记
- Unity3D之UGUI学习EventSystem
- TCP长连接与短连接的区别
- Python中的sys.argv
- 待续中的图灵机与有限状态机
- 网络篇 - 07.NSURLSession的应用场景
- iOS程序员面试题系列(2)
- 没有后悔药,只是在乎就失去了
- UI基础----常见控件的使用之TextView
- mysql中的数据导入与导出