`

java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接

 
阅读更多
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;
    }
}
0
1
分享到:
评论

相关推荐

    29.java字符串+操作.zip

    29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    Java-JDK-11.0.8(Windows &amp;amp; Mac os) 下载

    Java JDK 11.0.8 是Oracle公司发布的Java开发工具包的一个稳定版本,它针对开发者提供了完整的编译、调试和运行Java应用程序所需的环境。这个版本支持Windows和Mac OS操作系统,使得不同平台上的开发者都能方便地...

    javabase64-1.2.jar

    【标题】"javabase64-1.2.jar" 是一个Java库,主要用于实现Base64编码和解码功能。...开发者在使用这个库时,可以通过它的API来轻松地将二进制数据转换为Base64字符串,或者将Base64字符串还原为原始二进制形式。

    java实验-字符串.docx

    在Java中,字符串比较有两种方式:使用"=="运算符和调用`equals()`方法。"=="运算符比较的是两个字符串对象的引用,看它们是否指向内存中的同一个位置。而`equals()`方法则比较字符串的内容是否相同。在这个实验中,...

    java 正则表达式应用jar包 regex-smart.jar

    `regex-smart.jar`这个库显然是为了简化开发者在Java项目中使用正则表达式的流程,它提供了一系列内置的验证、提取和清洗方法,使得处理字符串变得更加高效和便捷。 首先,让我们了解一下正则表达式的基础概念。...

    Java实现字符串的匹配.doc

    该算法的时间复杂度为 O(m+n),其中 m 和 n 分别是长字符串和短字符串的长度。在最好的情况下,时间复杂度为 O(n)。 结论 本文介绍了如何使用 Java 实现字符串匹配,并且提供了基于素数乘积的算法实现。该算法的...

    Java根据正则表达式生成字符串—Xeger,automaton

    在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...

    JAVA日期与字符串的转换

    ### JAVA日期与字符串的转换 在Java编程中,经常需要将日期对象转化为字符串形式以便于存储或显示,或者反过来将字符串转化成日期对象来进行日期计算等操作。本文将详细介绍如何在Java中实现这两种转换。 #### 一...

    java 字符串a-z排序

    因此,如果我们要对一个字符串中的字符进行排序,我们不能直接改变原字符串,而是需要创建一个新的字符串。 以下是一个基本的步骤来实现这个功能: 1. **创建字符数组**:将字符串转换为字符数组,因为数组可以被...

    apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    虽然在FTP操作中不是必需的,但它在处理字符串时非常有用,比如在解析FTP服务器返回的文件列表或进行文本匹配时。Jakarta ORO提供了`Pattern`和`Matcher`类,这些类可以帮助开发者构建和执行复杂的正则表达式,以...

    字符串长度的判断 JAVA

    例如,如果我们有一个字符串`String str = "Hello, World!";`,我们可以这样截取: ```java String subStr1 = str.substring(7); // "World!" String subStr2 = str.substring(7, 12); // "World" ``` 这里,`...

    java-leetcode面试题解哈希表第387题字符串中的第一个唯一字符-题解.zip

    3. 再次遍历字符串,检查每个字符在哈希表中的出现次数,如果为1,则找到了第一个唯一字符,返回其索引。 4. 如果遍历结束都没有找到唯一字符,返回-1。 具体Java代码实现: ```java public class Solution { ...

    JAVA 字符串 操作

    在Java编程语言中,字符串(String)是一个非常基础且重要的数据类型。它被广泛用于处理文本信息,例如用户输入、文件内容、网络数据等。本文将深入探讨Java中的字符串操作,包括创建、比较、拼接、查找与替换、分割...

    java统计字符串每个字符出现次数

    在Java编程中,统计字符串中每个字符出现的次数是一个常见的任务,特别是在面试或笔试中作为考察点。这个任务可以通过使用HashMap来实现,因为HashMap提供快速的查找和插入操作,适合处理这种计数的问题。以下是一个...

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节;

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...

    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的字符串拼接与性能

    JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...

Global site tag (gtag.js) - Google Analytics