public class MaxCatenate {
/*
* Q.37 有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,
* 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
*/
public static void main(String[] args){
String[] text = new String[]{
"abcd",
"bcde",
"cdea",
"deab",
"eaba",
"abab",
//"babc",
"deac",
"cdei",
"bcdf",
"cdfi",
"dfic",
"cdfk",
"bcdg",
};
new MaxCatenate().maxCatenate(text);
}
public void maxCatenate(String[] text){
int size=text.length;
int[][] adjMatrix=new int[size][size];
//create Graph.Use adjacent matrix
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
if(this.hasEdge(text[i],text[j])){
adjMatrix[i][j]=1;
}
}
}
//create a new array to keep the 'adjMatrix'unchanged.
int[][] finalCost=new int[size][size];
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
finalCost[i][j]=adjMatrix[i][j];
}
}
int max=0;
for(int k=0;k<size;k++){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
if(finalCost[i][k]!=0&&finalCost[k][j]!=0&&
finalCost[i][k]+finalCost[k][j]>finalCost[i][j] ){
finalCost[i][j]=finalCost[i][k]+finalCost[k][j];
max=(max>finalCost[i][j]?max:finalCost[i][j]);
}
}
}
}
for(int i=0;i<size;i++){
if(finalCost[i][i]>1){//not '>0',consider "bbbb"
System.out.println("circle detected");
return;
}
}
System.out.println("maxLength is "+(max+1));
}
//true if strA's last m characters equals to strB's first m characters
public boolean hasEdge(String strA,String strB){
boolean result=false;
String suffix=strA.substring(1);
result=strB.startsWith(suffix);
return result;
}
}
分享到:
相关推荐
29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29...
在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...
Java JDK 11.0.8 是Oracle公司发布的Java开发工具包的一个稳定版本,它针对开发者提供了完整的编译、调试和运行Java应用程序所需的环境。这个版本支持Windows和Mac OS操作系统,使得不同平台上的开发者都能方便地...
【标题】"javabase64-1.2.jar" 是一个Java库,主要用于实现Base64编码和解码功能。...开发者在使用这个库时,可以通过它的API来轻松地将二进制数据转换为Base64字符串,或者将Base64字符串还原为原始二进制形式。
在Java中,字符串比较有两种方式:使用"=="运算符和调用`equals()`方法。"=="运算符比较的是两个字符串对象的引用,看它们是否指向内存中的同一个位置。而`equals()`方法则比较字符串的内容是否相同。在这个实验中,...
`regex-smart.jar`这个库显然是为了简化开发者在Java项目中使用正则表达式的流程,它提供了一系列内置的验证、提取和清洗方法,使得处理字符串变得更加高效和便捷。 首先,让我们了解一下正则表达式的基础概念。...
该算法的时间复杂度为 O(m+n),其中 m 和 n 分别是长字符串和短字符串的长度。在最好的情况下,时间复杂度为 O(n)。 结论 本文介绍了如何使用 Java 实现字符串匹配,并且提供了基于素数乘积的算法实现。该算法的...
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
### JAVA日期与字符串的转换 在Java编程中,经常需要将日期对象转化为字符串形式以便于存储或显示,或者反过来将字符串转化成日期对象来进行日期计算等操作。本文将详细介绍如何在Java中实现这两种转换。 #### 一...
因此,如果我们要对一个字符串中的字符进行排序,我们不能直接改变原字符串,而是需要创建一个新的字符串。 以下是一个基本的步骤来实现这个功能: 1. **创建字符数组**:将字符串转换为字符数组,因为数组可以被...
虽然在FTP操作中不是必需的,但它在处理字符串时非常有用,比如在解析FTP服务器返回的文件列表或进行文本匹配时。Jakarta ORO提供了`Pattern`和`Matcher`类,这些类可以帮助开发者构建和执行复杂的正则表达式,以...
例如,如果我们有一个字符串`String str = "Hello, World!";`,我们可以这样截取: ```java String subStr1 = str.substring(7); // "World!" String subStr2 = str.substring(7, 12); // "World" ``` 这里,`...
3. 再次遍历字符串,检查每个字符在哈希表中的出现次数,如果为1,则找到了第一个唯一字符,返回其索引。 4. 如果遍历结束都没有找到唯一字符,返回-1。 具体Java代码实现: ```java public class Solution { ...
在Java编程语言中,字符串(String)是一个非常基础且重要的数据类型。它被广泛用于处理文本信息,例如用户输入、文件内容、网络数据等。本文将深入探讨Java中的字符串操作,包括创建、比较、拼接、查找与替换、分割...
在Java编程中,统计字符串中每个字符出现的次数是一个常见的任务,特别是在面试或笔试中作为考察点。这个任务可以通过使用HashMap来实现,因为HashMap提供快速的查找和插入操作,适合处理这种计数的问题。以下是一个...
java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。Applet是Java的一个早期特性,用于在Web浏览器中运行小...
在Python中,如果你只想截取前`n`个字符,可以使用`[:n]`,如果想从某个位置开始截取`n`个字符,可以使用`[start:start+n]`。比如,`s[:5]`将返回`"Hello"`,`s[7:7+5]`将返回`"world"`。 对于包含汉字的字符串,...
Java基础-判断随机字符串中的字母和数字 Java是一种广泛应用于软件开发的编程语言,而字符串处理是Java开发中的一项基本操作。在实际开发中,我们经常需要对字符串进行处理和判断,例如判断字符串中有多少字母、...
JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...