您的位置:首页 > 其它

字串的连接最长路径查找

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]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: