| 
 
|   
 
 仅供个人参考,欢迎讨论,也可到我的博客www.itcast.info讨论。为了目标奋斗着......
 复制代码package suisuisui.day15;
/*
 * 两个字符串中最大相同的子串。
 * "qwerabcdtyuiop"
 * "xcabcdvbn"
 * 思路:首先我们用较短的字符串当做key值在较大的字符串中查找。
 *                 如果找到,则返回此串,
 *                 如果未找到,将key的长度减1,可以得到2个key,分别查找,找到即返回此串,未找到再次将key长度减一
 *                 依次遍历查找。直到找到为止。 
 * 注意:如果两个字符串其中一个为空,那么直接返回空。如果不做这个判断的话下面contains()会抛出异常要try一下
 * 
 * contains
public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。 
参数:
s - 要搜索的序列 
返回:
如果此字符串包含 s,则返回 true,否则返回 false 
抛出: 
NullPointerException - 如果 s 为 null
从以下版本开始: 
1.5 
 *                 
 */
class Test2{
        
        public static void main(String[] args){
                String str1 = "qwerabcdtyuiop";
                String str2 = "xcabcdvbn";
                System.out.println("最大相同字符串是: " + getMaxSame(str1,str2));
        }
        
        /**
         * 获取最大子串
         * 
         * @param str1
         * @param str2
         * @return
         */
        public static String getMaxSame(String str1, String str2) {        
                if (str1==null || str2== null) //如果有一个字符串为空 返回空,结束函数
                        return null;
                String max = str1.length()>str2.length()? str1 : str2;
                String min = str1.length()<str2.length()? str1 : str2;                
                for (int i = 0; i < min.length(); i++) {
                        for (int startIndex = 0, endIndex = min.length()-i; endIndex <= min.length(); startIndex++, endIndex++) {
                                String sub = min.substring(startIndex, endIndex);//定义新的子串作为key,判断是否包含在内。
                                if(max.contains(sub))//如果包含子串
                                        return sub;//返回找到的子串。这个就是最大的子串,不明白的看图吧。
                        }
                }                
                return null;//如果没有找到相同字符串,返回空。
        }
}
 | 
 |