黑马程序员技术交流社区

标题: 关于string类里一个练习 [打印本页]

作者: 阿布Yocan    时间: 2014-5-20 21:05
标题: 关于string类里一个练习
本帖最后由 阿布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循环,还有编译的时候老是出问题

作者: 丁绍然    时间: 2014-5-20 22:45
,主函数开始看啊,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返回了空格。
作者: 阿布Yocan    时间: 2014-5-21 10:33
丁绍然 发表于 2014-5-20 22:45
,主函数开始看啊,min赋值语句改为max.equals(s1)
for(int x=0; x

基本上理解了,谢谢
作者: 丁绍然    时间: 2014-5-21 10:42
阿布Yocan 发表于 2014-5-21 10:33
基本上理解了,谢谢

共同学习,共同进步
作者: 艮昕辶    时间: 2014-5-21 14:41
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索引位置
作者: yinxjfly    时间: 2014-5-25 13:55
这种循环方式是效率相对较高的,因为是要获取最大子串,肯定是要从长往短取,
外循环的作用有两个,一个是控制子串长度,一个是控制循环次数(其实是一回事儿)
内循环是通过外循环获取子串长度的变量x后,获取长度相等的所有子串逐一与长串匹配,如果长串contain子串,则返回短串!
作者: Aron    时间: 2014-5-25 22:42
学习下 共同进步




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