黑马程序员技术交流社区

标题: 取两个字符串最大相同字符串的问题 [打印本页]

作者: Joyuang    时间: 2012-2-10 22:52
标题: 取两个字符串最大相同字符串的问题
本帖最后由 钱兆元 于 2012-2-11 00:24 编辑
  1.         private static String getMaxSubstring2(String s1, String s2) {
  2.                
  3.                 String max  = null;
  4.                 for (int i = 0; i < s2.length(); i++) {
  5.                         for (int start = 0,end = s2.length()-i; end != s2.length()+1;start++,end++) {
  6.                                
  7.                                 String temp = s2.substring(start,end);
  8.                                 if(s1.contains(temp))
  9.                                 {
  10.                                         //return temp;
  11.                                         max = temp;
  12.                                         System.out.println(temp);
  13.                                         break ;
  14.                                 }
  15.                         }
  16.                 }
  17.                 for(int x = 0,y = max.length(); y!=s2.length()+1 ; x++,y++ ){
  18.                         String s = s2.substring(x, y);
  19.                         if(s1.contains(s))
  20.                                 System.out.println("max==="+s);
  21.                        
  22.                 }
  23.                
  24.        
  25.                 return null;
  26.         }
  27.        
复制代码
这是取两个字符串中最大相同字符串的代码,编译正确,但是不是想要的结果,哪里错了呢?

明白了
作者: 杜明辉    时间: 2012-2-11 00:11
这是我自己写的代码,你看看。。
public class Test3 {

        /**
         * @param args
         */
        public static void main(String[] args) {

                String s1 = "wertabckkkyuioyyyy";
                String s2 = "xcbabcnkkkn";
                String max = getMaxSubstring(s2,s1);
                System.out.println(max);
        }
        private static String getMaxSubstring(String s1, String s2) {
               
                String min,max;
                max = s1.length()>s2.length()?s1:s2;
               
                min = max.equals(s1)?s2:s1;
               
                System.out.println("maxlen:"+max);
                System.out.println("minlen:"+min);
               
                for (int i = 0; i < min.length(); i++) {
                        for (int start = 0,end = min.length()-i; end != min.length()+1;start++,end++) {
                               
                                String temp = min.substring(start,end);
                                if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
                                        return temp;
//                                        System.out.println(temp);
                        }
                }
                return null;
        }

        private static String getMaxSubstring2(String s1, String s2) {
               
                String max  = null;
                w:for (int i = 0; i < s2.length(); i++) {
                        for (int start = 0,end = s2.length()-i; end != s2.length()+1;start++,end++) {
                               
                                String temp = s2.substring(start,end);
                                if(s1.contains(temp))//if(s1.indexOf(temp)!=-1)
                                {
                                        //return temp;
                                        max = temp;
                                        System.out.println(temp);
                                        break w;
                                }
                        }
                }
                /**/
                for(int x = 0,y = max.length(); y!=s2.length()+1 ; x++,y++ ){
                        String s = s2.substring(x, y);
                        //System.out.println(s+"--");
                        if(s1.contains(s))
                                System.out.println("max==="+s);
                       
                }
               
       
                return null;
        }
       
       

}

作者: 尹旗龙    时间: 2012-2-11 14:04
我觉得问题很简单 第一个for里内层循环得到最大相同字符串后循环并没有结束 在内层循环后加一个判断 因为第一次拿到的一定是最大相同字符串 这时候直接让循环退出就好了 这样结果就正确了
  1. class ComString{
  2.               public static String getMaxSubstring2(String s1, String s2) {
  3.                
  4.                 String max  = null;
  5.                 for (int i = 0; i < s2.length(); i++) {
  6.                         for (int start = 0,end = s2.length()-i; end != s2.length()+1;start++,end++) {
  7.                                 
  8.                                 String temp = s2.substring(start,end);
  9.                                 if(s1.contains(temp))
  10.                                 {
  11.                                         //return temp;
  12.                                         max = temp;
  13.                                         System.out.println(temp);
  14.                                         break ;
  15.                                 }
  16.                         }
  17. if(max!= null)
  18.         break;
  19.                 }
  20.                 for(int x = 0,y = max.length(); y!=s2.length()+1 ; x++,y++ ){
  21.                         String s = s2.substring(x, y);
  22.                         if(s1.contains(s))
  23.                                 System.out.println("max==="+s);
  24.                         
  25.                 }
  26.                
  27.         
  28.                 return null;
  29.         }
  30.         
  31.         
  32. }



  33. class ShuChu
  34. {
  35.         public static void main(String[] args)
  36.         {
  37.                 String s1 = "我是一个好人!";
  38.                 String s2 = "你是一个好人!";

  39.                 ComString.getMaxSubstring2(s1,s2);
  40.         }
  41. }

复制代码
结果验证正确
作者: 最初的理想    时间: 2012-2-11 20:23
import java.util.ArrayList;
import java.util.*;

public class Test {
        public static void main(String args[]) {
                String s1 = "我是一个9j好人!";
                String s2 = "你是一个好人!";
                List<String> list = containString(s1, s2);
                Iterator<String> iter = list.iterator();
                while (iter.hasNext()) {
                        System.out.println(iter.next());
                }

        }

        public static List<String> containString(String s1, String s2) {

                String s = null;
                List<String> list = new ArrayList();
                for (int i = 0; i < s1.length(); i++) {
                        for (int j = s1.length(); j >= i; j--) {
                                if (s2.contains((s1.substring(i, j)))) {
                                        s = s1.substring(i, j);
                                        break;
                                }
                        }
                        if (s != null) {
                                if (list.size() == 0) {
                                        list.add(s);
                                } else {
                                        boolean flag = true;
                                        Iterator<String> iter = list.iterator();
                                        while (iter.hasNext()) {
                                                if (iter.next().contains(s)) {
                                                        flag = false;
                                                        break;
                                                }
                                        }
                                        if (flag) {
                                                list.add(s);
                                        }
                                }

                        }
                }
                return list;
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2