精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-28
nicholas.sun 写道 我的思路是先把前面二个字符串的字符序列取交集,然后判断字符是否是连续的,
从而得出一个交集,然后与第三个字符串做交集,最后取交集中字符串长度最长的那个。 随便想了下,不知道对不对。。。 对的 |
|
返回顶楼 | |
发表时间:2011-11-28
是的是一种树形结构呵呵..以前写过..
|
|
返回顶楼 | |
发表时间:2011-11-28
我想问一下
如果 字符串是 acdb,dcba,cabd 那最大公字串是什么呢? |
|
返回顶楼 | |
发表时间:2011-11-28
baiweiyll 写道 我想问一下
如果 字符串是 acdb,dcba,cabd 那最大公字串是什么呢? 看到你的这个例子,我觉的我的思路里需要将字符串平移, 还有你的例子很好,一个字符串的全排列,可以检验一些思路正不正确 |
|
返回顶楼 | |
发表时间:2011-11-28
动态规划。
|
|
返回顶楼 | |
发表时间:2011-11-28
动态规划。
|
|
返回顶楼 | |
发表时间:2011-11-28
import java.util.ArrayList;
import java.util.Arrays; import java.util.Collections; import java.util.Comparator; /** * 求N个字符串中的最大公子串 * 思路:先找出字符串中最短的那个字符串,然后依次取出最短字符串中的每个字符与其余字符串进行比较。 */ public class ShortString { //字符串列表中的最短字符串 public String shortStr(ArrayList<String> strings){ return Collections.min(strings, new Comparator<String>(){ @Override public int compare(String str1, String str2) { if(str1.length()<str2.length()) return -1; else if(str1.length()==str2.length()) return 0; else if(str1.length()>str2.length()) return 1; return 0; } }); } //判断字符串列表中的每个字符串是否包含指定字符串,如果有一个不包含就返回false public boolean contains(ArrayList<String> strings,String str){ for(String s:strings){ if(!s.contains(str)) return false; } return true; } //最短公共字符串 public String maxSubString(ArrayList<String> strings){ String maxStr ="";//最长的公字符串 String tempStr="";//临时变量 String minStr=shortStr(strings);//所有字符串中的最短字符串 int i = 0; for( i = 0;i<minStr.length();i++){ tempStr += minStr.charAt(i); if(contains(strings,tempStr)){ //新公子串长度大于原来公子串,maxStr重新赋值 if(maxStr.length()<tempStr.length()) maxStr = tempStr; } else { //如果剩余的字符数小于公子串长度,就没有必要再比较了 if(minStr.length()-i<maxStr.length()) break; tempStr = minStr.charAt(i)+""; } } return maxStr; } public static void main(String[] args) { ArrayList<String> strings = new ArrayList<String>(Arrays.asList("ababcghy","abcdeftdsfgsdg","abcdefsdf")); ShortString ss = new ShortString(); System.out.println("字符串列表:"+ strings); System.out.println("最短字符串:"+ss.shortStr(strings)); System.out.println("最长公子串:"+ss.maxSubString(strings)); } } |
|
返回顶楼 | |
发表时间:2011-11-28
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; /** * 求N个字符串中的最大公子串 * 思路:先找出字符串中最短的那个字符串,然后依次取出最短字符串中的每个字符与其余字符串进行比较。 */ public class ShortString { //字符串列表中的最短字符串 public String shortStr(ArrayList<String> strings){ return Collections.min(strings, new Comparator<String>(){ @Override public int compare(String str1, String str2) { if(str1.length()<str2.length()) return -1; else if(str1.length()==str2.length()) return 0; else if(str1.length()>str2.length()) return 1; return 0; } }); } //判断字符串列表中的每个字符串是否包含指定字符串,如果有一个不包含就返回false public boolean contains(ArrayList<String> strings,String str){ for(String s:strings){ if(!s.contains(str)) return false; } return true; } //最短公共字符串 public String maxSubString(ArrayList<String> strings){ String maxStr ="";//最长的公字符串 String tempStr="";//临时变量 String minStr=shortStr(strings);//所有字符串中的最短字符串 int i = 0; for( i = 0;i<minStr.length();i++){ tempStr += minStr.charAt(i); if(contains(strings,tempStr)){ //新公子串长度大于原来公子串,maxStr重新赋值 if(maxStr.length()<tempStr.length()) maxStr = tempStr; } else { //如果剩余的字符数小于公子串长度,就没有必要再比较了 if(minStr.length()-i<maxStr.length()) break; tempStr = minStr.charAt(i)+""; } } return maxStr; } public static void main(String[] args) { ArrayList<String> strings = new ArrayList<String>(Arrays.asList("ababcghy","abcdeftdsfgsdg","abcdefsdf")); ShortString ss = new ShortString(); System.out.println("字符串列表:"+ strings); System.out.println("最短字符串:"+ss.shortStr(strings)); System.out.println("最长公子串:"+ss.maxSubString(strings)); } } |
|
返回顶楼 | |
发表时间:2011-11-28
操作字符串用 StringBuffer,不用String
|
|
返回顶楼 | |
发表时间:2011-11-28
yangguo 写道 动态规划。
是什么? |
|
返回顶楼 | |