输入一个由小写字母组成的字符串,可以看作是若干包含相同字母的碎片组合而成。例如aaaabbaaabbc,就可以看作是由4个碎片“aaaa"\"bb"\"aaa"\"c"组成;输出要求:将各个碎片按照字典序输出,每个碎片占一行,注意相同的碎片只能出现一次。
输入:abbaaacadd
输出:a
aaa
bb
c
dd
输入:aabbcc
输出:aa
bb
cc
输入:a
输出:a
思路分析:
1)当后一个字符与前一个字符不相同时,就存储前面的,这里考虑使用substring(a,b)
2)这里需要注意:在判断最后一个字符与倒数第二个字符时,需要单独拎出来;
3)注意:边界情况,长度为1的字符串,长度为2的字符串等等
4)这里利用TreeSet数据结构来存储,直接消除重复,并且按照字典顺序排列。
代码分享:
package StringDemo;
//碎片化字符串
import java.util.*;
public class StringDemo11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] charArr = str.toCharArray();
Set<String> arrayList = new TreeSet<>();
int start = 0;
//注意临界条件
if (charArr.length == 1) {
System.out.println(charArr[0]);
} else {
for (int i = 0; i < charArr.length - 1; i++) {
if (i != charArr.length - 2) {
if (charArr[i + 1] == charArr[i]) {
continue;
} else {
int end = i + 1;
String temp = str.substring(start, i + 1);
arrayList.add(temp);
start = i + 1;
continue;
}
} else {
if (charArr[i + 1] == charArr[i]) {
String temp = str.substring(start);
arrayList.add(temp);
} else {
String temp = str.substring(start, i + 1);
arrayList.add(temp);
String temp2 = str.substring(i + 1);
arrayList.add(temp2);
}
}
}
}
for (String s : arrayList) {
System.out.println(s);
}
}
}

这篇博客探讨了如何处理碎片化字符串的问题,即将一个由相同字母组成的字符串拆分成多个字典序排列的碎片,并确保每个碎片只出现一次。通过分析思路和使用substring方法,结合边界条件和TreeSet数据结构,可以有效地实现这一目标。代码实现中,TreeSet消除了重复并保持了排序。
1084

被折叠的 条评论
为什么被折叠?



