gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:18 30 4
gpt4 key购买 nike

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

例如:

1 )abcdeddd应该给

开始

2)aaabcdrrr

abcd

我写了这段代码

        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 - 如何从java中的字符串中提取最长的子字符串(具有不同的连续字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301474/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com