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

改进版的获取两个字符串的最大子串,之前发过一个帖子讲述获取两个字符串的一个最大子串,这次是获取两个字符串的所有的最大子串
public class Test037
{

        /**功能:获取两个字符串的最大子串
         *
         * 思路:将短的那个字符串,获取其长度每次减一的子串,判断该子串是否存在于长的字符串中。
         * @param args
         */
        public static void main(String[] args)
        {
                System.out.println(compare("abced","efbceghi"));
        }
       
        //获取两个字符串所有的最大子串,longstr代表长度比较长的字符串
        public static String compare(String longstr, String shortstr)
        {
                //定义一个标识符,功能:如果已经获取了长度为4的最大子串,就不再将长度小于4的子串放进StringBuffer
                int flag = 0;
               
                //定义一个字符串变量,用来存放字符串的子串
                String tempstr;
               
                //定义一个StringBuffer的对象sb,用来存放已找到的最大子串
                StringBuffer sb = new StringBuffer();
               
                //这里是个转换功能,如果用户输入的longstr比shortstr短,就将两个引用互换。
                if(longstr.length() < shortstr.length())
                {
                        tempstr = longstr;
                        longstr = shortstr;
                        shortstr = tempstr;
                }
               
                int len = shortstr.length();  
               
                //通过双层for循环获取短字符串的所有子串
                for(int count =0;count <= len-1;count++)
                {
                        for(int start = 0, end = len-count; end <= len; start ++,end++)
                        {
                                //获取短字符串的子串,需要注意的是substing(startIndex,endIndex)方法
                                //返回的子串包含startIndex,不包含endIndex
                                tempstr = shortstr.substring(start, end);
                                //判断长字符串中是否存在该子串
                                if(longstr.contains(tempstr))
                                {
                                        if(flag == 0)                                       
                                        {                               
                                                flag = tempstr.length();   //记录最大相同子串的长度
                                                sb.append(tempstr + " ");  //将最大相同子串存进sb
                                        }
                                        else if(tempstr.length() == flag)  //如果还有长度相同的最大子串,存进sb
                                        {
                                                sb.append(tempstr + " ");
                                        }
                                        else   //如果没有了长度相同的最大子串,跳出循环
                                                break;
                                }
                        }
                }
                return (sb.toString().length()>0)? sb.toString() : "没有找到"; //如果sb的长度大于零,则返回sb.toString(),
                                                                             //否则返回“没找到”
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马