`

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...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    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操作系统,使得不同平台上的开发者都能方便地...

    java实验-字符串.docx

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

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

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

    易语言八种方法倒转字符串源码

    在易语言编程环境中,倒转字符串是一个常见的操作,可以用于各种文本处理任务。本文将详细介绍八种不同的方法来实现这一功能,并提供相应的源码。易语言作为一款中文编程语言,以其简洁直观的语法深受初学者和专业...

    JAVA日期与字符串的转换

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

    按顺序合并组成一个新的字符串

    请编写函数fun,,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。 例如,字符串数组中的M个字符串为 AAAA BBBBBBB CC 则合并后...

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

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

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

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

    字符串长度的判断 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输入一个长度不超过30的字符串然后再输入一个字符输出该字符在字符串中出现的次数的源代码

    java代码-使用java输入一个长度不超过30的字符串然后再输入一个字符输出该字符在字符串中出现的次数的源代码 ——学习参考资料:仅用于个人学习使用!

    JAVA 字符串 操作

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

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

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

    Java分割字符串

    在Java编程语言中,分割字符串是一项常见的操作,它允许我们将一个长字符串分解成多个子字符串,每个子字符串对应原字符串中的某个部分。这通常通过使用`split()`方法来实现,该方法是Java `String`类的一个成员。在...

    Java获取随机字符串

    ### Java 获取随机字符串 在Java开发中,生成随机字符串是一个非常常见的需求,尤其是在密码学、安全验证、数据加密等场景中。本文将详细介绍如何在Java中生成随机字符串,并且会结合给定的部分代码示例进行深入...

    java字符串处理输入一个字符串和一个字符后,原字符串中所有该字符将被删除并显示出结果

    在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。Applet是Java的一个早期特性,用于在Web浏览器中运行小...

    截取指定长度的字符串

    在Python中,如果你只想截取前`n`个字符,可以使用`[:n]`,如果想从某个位置开始截取`n`个字符,可以使用`[start:start+n]`。比如,`s[:5]`将返回`"Hello"`,`s[7:7+5]`将返回`"world"`。 对于包含汉字的字符串,...

Global site tag (gtag.js) - Google Analytics