大家帮我看一下这个题目。我想了好久也没想出,要求用java的代码,小弟是初学者,谢谢了
求一个字符串中最长的相同子串。例如。bbeeessssff,就是ssss,qwerrfghh,就是rr和hh.

解决方案 »

  1.   


            String s = "qwerrfghh";
            StringBuffer news = new StringBuffer();
            char c = s.charAt(0);
            char d;
            int len = 0;
            news.append(c);
            for(int i=1; i<s.length(); i++) {
                d = s.charAt(i);
                if(c == d)
                    news.append(d);
                else {
                    c = d;
                    news.append(",").append(d);
                }
            }
            System.out.println("用逗号分割后的字符串:"+news.toString());
            String sb[] = news.toString().split(",");
            for(int i=0; i<sb.length; i++) {
                if(sb[i].length() > len)
                    len = sb[i].length();
            }
            System.out.println("最长字符串长度:"+len);
            System.out.println("最长字符串有:");
            for(int i=0; i<sb.length; i++) {
                if(sb[i].length() == len)
                    System.out.println(sb[i]);
            }
      

  2.   

    String s = "aaabbbbbcccccccd";
    String u = "?" + s;
    String d = s + "?";
    StringBuffer ms = new StringBuffer(); for (int i = 0; i < d.length(); ++i) {
    ms.append((char)('0' + u.charAt(i) - d.charAt(i)));
    } String r = ms.toString(); String[] rs = r.split("00*");
    int offset = 0;
    int max = 0;
    int from = 0;
    for (int i = 0; i < rs.length - 1; ++i) {
    offset = r.indexOf(rs[i], offset);
    int next = r.indexOf(rs[i + 1], offset += 1);
    if (next - offset > max) {
    max = next - offset + 1;
    from = offset - 1;
    //You can use ArrayList to store the result.
    }
    } System.out.println(from + " " + max);
      

  3.   

    public class longString { public static void main(String[] args) {
    String str = "rrbbeeeffff";
    StringBuffer sf = new StringBuffer();
    char d = str.charAt(0);
    int e = 0;
    for(int i=0;i<str.length();i++){
    char c = str.charAt(i);
    if(c == d){
    sf.append(c);
    }else{
    d = c;
    sf.append(",").append(c);
    }
    } String s[] = sf.toString().split(",");
            for(int i=0; i<s.length; i++) {
                if(s[i].length() > e)
                    e = s[i].length();
            }
            System.out.println("最长字符串长度为:"+e);
            System.out.println("最长字符串分别为:");
            for(int i=0; i<s.length; i++) {
                if(s[i].length() == e)
                    System.out.println(s[i]);
            }
    }
    }
      

  4.   


    private  static void getMaxStr(String str){
    String a="";
    String maxstr = "";
    int maxlength = 0; 
    int start=0;
    for(int i =0;i<str.length();i++){
                //判断当前的字符是否和前面的相同
    if(!a.equals(String.valueOf(str.charAt(i)))){//当前字符和前面的字符不相同
    start = i;//相同字符的开始位置
    a=String.valueOf(str.charAt(i));
    }else{ //当前字符和前面的字符相同
    String curmaxstr = str.substring(start,i+1);//从相同字符开始位置到目前的字符串
    int curmaxlength = curmaxstr.length();//相同字符串的长度
    if(curmaxlength>maxlength){//如果后面相同的字符串长度大于当前字符串长度的话
    maxlength = curmaxlength;
    maxstr = curmaxstr;
    }
    }
    }
    System.out.println("最大长度的字符串:" + maxstr);
    System.out.println("最大长度的字符串的长度:" + maxlength);

    }