如何从java中的字符串中提取最长的子字符串(具有不同的连续字符)

我想从字符串中提取最长的不同连续子字符串

例如:

1)abcdeddd
应该给

ABCDE

2)aaabcdrrr

A B C D

我写了这段代码

        for (int i = 0; i < lines; i++) {

            String s = bf.readLine();
            ArrayList<String> al = new ArrayList<String>();
            TreeMap<Integer, Integer> count = new TreeMap<Integer, Integer>();
            int point = 0;
            for (int j = 0; j < s.length() - 1; j++) {
                if (s.charAt(j + 1) != s.charAt(j)) {
                    Character xyz = s.charAt(j);
                    String news = al.get(point).concat(xyz.toString());
                    al.add(point, news);

                } else if (s.charAt(j + 1) == s.charAt(j)) {
                    point++;

                }

                for (int k = 0; k < al.size(); k++) {

                    count.put(al.get(k).length(), k);

                }

                System.out.println(al.get(count.get(count.size() - 1)));

            }

        }
    } catch (Exception e) {

    }
}
最佳答案
你也可以尝试这种方式.

    String s = "abcdefgdrrstqrstuvwxyzprr";
    Map<Integer,String> results=new HashMap<>();
    Set<String> set=new LinkedHashSet<>();
    for(int i=0;i<s.length()-1;i++){
        if(s.charAt(i)-s.charAt(i+1)==-1){
            set.add(""+s.charAt(i));
            set.add(""+s.charAt(i+1));
        }else {
            results.put(set.size(), set.toString());
            set=new LinkedHashSet<>();
        }
    }
    System.out.println(results);

出局:

  {0=[], 3=[r, s, t], 7=[a, b, c, d, e, f, g], 10=[q, r, s, t, u, v, w, x, y, z]}

现在你可以看到所有连续的字符.答案是最大的一个.通过这种方式,如果它们的长度相同,您可以找到多个连续的子字符串.

你可以的

 String largest=new ArrayList<>(results.values())
                               .get(results.size()-1).replaceAll("\\[|]|, ","");
 if("".equals(largest)){
   System.out.println("There is not consecutive substring for \""+s+"\"");
 }else {
   System.out.println("largest consecutive substring of \""+s+"\" is "+ largest);
 }

现在出来:

largest consecutive substring of "abcdefgdrrstqrstuvwxyzprr" is qrstuvwxyz

转载注明原文:如何从java中的字符串中提取最长的子字符串(具有不同的连续字符) - 代码日志