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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

两个字符串的最大相同子串。
                 比如:
                 "sadabcdfghjkl"
                  werabcdtyu"

22 个回复

倒序浏览
先顶再看
回复 使用道具 举报
看不懂啊  !!   ??
回复 使用道具 举报
真的是面试题吗? 好难啊。。。。。
说说目前水平的思路吧:
先找取 最短那个字符串   
用双重for循环 。 排列组合出所有字符串可能存在的情况。
(就这里最麻烦。。。)
用ArrayList存放。
排完序之后 从大到小依次存入Set集合。(唯一)。
最后迭代取出  用contians方法 判断, 如果相等就返回该字符串 。break;
回复 使用道具 举报
oup 中级黑马 2015-11-14 21:46:14
报纸
看到过 待我回忆下!
回复 使用道具 举报
没理解啥意思
回复 使用道具 举报
sshh11 中级黑马 2015-11-14 23:10:09
7#
不知道 题目具体问什么
回复 使用道具 举报
给我点时间。。。。
回复 使用道具 举报
输入两个字符串,比较出两个字符串长度的大小,再利用循环把得到的字符串长度小的(例如“abcde”可以分为abcd,bcde,abc,bcd,cde,ab,bc,cd,de,a,b,c,d,e,)那个去和大的比,看大的中是否contains字符串小的那个,如果有就把他添加到集合中,最后得到最大长度那个
回复 使用道具 举报
先判断哪个是最大子串,用双重for循环,看大字符串是否包含小字符串,不包含,就减一位,就这么循环,一直循环到有为止,此时就是最大的字串
回复 使用道具 举报
不知有没漏洞,欢迎指教
  1. public class MatchSubstring {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 String s1="sadabcdfghjkl";
  7.                 String s2="werabcdtyu";
  8.         //长度短的是s1
  9.                 if(s1.length()>s2.length()){
  10.                         String s=s2;
  11.                         s2=s1;
  12.                         s1=s;
  13.                 }
  14.                 //从长到短遍历s1,判断s2是否包含
  15.                 String s=panDuan(s1,s2);
  16.                 System.out.println(s);
  17.                
  18.         }

  19.         private static String panDuan(String s1, String s2) {
  20.                 int len=s1.length();
  21.                 String s=null;
  22.                 //遍历s1的长度
  23.                 a:for(int i=len;i>0;i--){
  24.                         //遍历长度相同的子串
  25.                         for(int j=0;j<len-i+1;j++){
  26.                                 String ss=s1.substring(j,j+i-1);
  27.                                 //判断是否包含
  28.                                 if(s2.contains(ss)){
  29.                                         s=ss;
  30.                                         //当找到后跳出所有循环
  31.                                         break a;
  32.                                 }
  33.                         }
  34.                        
  35.                 }
  36.                 if(s==null){
  37.                         return "不存在";
  38.                 }
  39.                 return s;
  40.         }
  41. }
复制代码



回复 使用道具 举报
dsap 中级黑马 2015-11-15 18:36:49
12#
什么意思?
回复 使用道具 举报

截取两个字符串中最大相同的子字符串
回复 使用道具 举报

截取两个字符串中最大相同子字符串
回复 使用道具 举报
silentCat 发表于 2015-11-15 18:07
不知有没漏洞,欢迎指教

没看太明白,等后天放假在看看,不过跟我的想法不太相同 。我的还没写完。。。。
         * 分析:
         *                for嵌套循环,外循环判断一共需要循环的次数,       
         *                内循环从小字符串的第一个字符开始,进行判断,大字符串是否包含小字符串,如果包含进行向后判断,如果不包含则跳出循环,
         *                在判断时记录长度 计数器累加思想 (count),最后取count的最大值,并输出字符串
         *               
         */
        public static void main(String[] args) {
                 String s1="sadabcdfghjkl";
                 String s2="werabcdtyu";
                 for (int i=0; i<s2.length(); i++) {
                         for (int j=i; j<s2.length(); j++ ) {
                                 if (s2.contains(s1.substring(j,j+1))) {
                                         
                                 }
                         }
                 }
        }
}
回复 使用道具 举报
冰霜之卅 发表于 2015-11-14 21:42
真的是面试题吗? 好难啊。。。。。
说说目前水平的思路吧:
先找取 最短那个字符串   

这么费事吗?你这一说这题真的好难啊
回复 使用道具 举报
看不懂..
回复 使用道具 举报
这题有点意思
回复 使用道具 举报
拿短的那个字符串一个一个缩短字符去跟第一个字符串比较,就像移动固定的长度的楼梯一样
回复 使用道具 举报
以前写过  不怎么记得了   好像思路是 用第二个字符不断的从开头和结尾缩短一个字符,在与第一个字符串进行比较。这样不断的比较,知道找的相匹配的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马