A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joyuang 黑马帝   /  2012-2-10 22:52  /  2412 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钱兆元 于 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.        
复制代码
这是取两个字符串中最大相同字符串的代码,编译正确,但是不是想要的结果,哪里错了呢?

明白了

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

3 个回复

倒序浏览
这是我自己写的代码,你看看。。
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;
        }
       
       

}

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
我觉得问题很简单 第一个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. }

复制代码
结果验证正确

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马