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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿布Yocan 中级黑马   /  2014-5-20 21:05  /  1799 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿布Yocan 于 2014-6-4 21:16 编辑

//String(字符串练习)
/*
4,获取两个字符串中最大相同字串,第一个动作,将短的那个串进行长度一次递减的字串打印,
        “abcwerthekkuuieiosjfjso”
        “cvkkuuesk”
        思路:
                1,将短的那个字串按照长度递减的方法获取到
                2,将每获取到的字串去长串中判断是否包含。
                        如果包含,已经找到!
*/

class  StringTest3
{
        public static void sop(String str)
        {
                System.out.println(str);
        }
        public static void main(String[] args)
        {
                String s1 = "abcwerthehelloieiosjfjso";
                String s2 = "cvhelloesk";
                sop(getMaxSubString(s1,s2));

        }
        public static void getMaxSubString(String s1,String s2)
        {
                String max = "",min= "";
                max = (s1.length()>s2.length())?s1: s2;
                min = (max==s1)?s2: s1;
                sop("max="+max+"...min="+min);
                for(int x=0; x<s2.length(); x++)
                {
                        for(int y=0,z=s2.length()-x; z!=s2.length()+1; y++,z++)
                        {
                                String temp = s2.substring(y,z);
                                if(s1.contains(temp)) //if(s1.indeOf(temp)!=-1)
                                        return temp;
                        }
                }
                return "";
        }
        
}
不是特别理解毕老师讲解的这道练习,题,有哪位大神可以讲解下那个内外for循环,还有编译的时候老是出问题

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
,主函数开始看啊,min赋值语句改为max.equals(s1)
for(int x=0; x<s2.length(); x++)是控制小字符串减少的支付个数,从0个开始。
y变量控制小字符串子串的起始位置,z控制末尾位置。这在看第二个循环,首先要知道y-z的值是固定的,就是说子串长度是固定的。for语句控制依次比较完每个大小相同的子串。
产生子串的顺序是:(第一个for控制行,第二个for控制每行个数)
cvkkuuesk
cvkkuues,vkkuuesk
cvkkuue,vkkuues,kkuuesk
cvkkuu,vkkuue,kkuues,kuuesk
如果大的字符串 包含子串了就返回temp。如果没有相同的,最后的return返回了空格。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
丁绍然 发表于 2014-5-20 22:45
,主函数开始看啊,min赋值语句改为max.equals(s1)
for(int x=0; x

基本上理解了,谢谢
回复 使用道具 举报
阿布Yocan 发表于 2014-5-21 10:33
基本上理解了,谢谢

共同学习,共同进步
回复 使用道具 举报
public static void getMaxSubString(String s1,String s2)

public static String getMaxSubString(String s1,String s2)

x决定short字符串即将剪切的子串的长度 子串长度length=shortString.length-x;
for(int x=0; x<s2.length(); x++)
y就是子串0号索引位置
z就是子串0+length索引位置
回复 使用道具 举报
这种循环方式是效率相对较高的,因为是要获取最大子串,肯定是要从长往短取,
外循环的作用有两个,一个是控制子串长度,一个是控制循环次数(其实是一回事儿)
内循环是通过外循环获取子串长度的变量x后,获取长度相等的所有子串逐一与长串匹配,如果长串contain子串,则返回短串!
回复 使用道具 举报
Aron 中级黑马 2014-5-25 22:42:12
7#
学习下 共同进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马