Java将两个字符串,先合并,后去重,不能使用stringbuilder何HashSet,只能使用字符串或者数组自带的方法实现
时间: 2024-01-13 15:03:11 浏览: 85
如果只能使用字符串或数组自带的方法,可以使用一个长度为256的数组来实现去重操作。具体步骤如下:
1. 将两个字符串合并成一个字符串。
2. 创建一个数组,数组的长度为所有字符的ASCII码值的最大值加1。
3. 遍历字符串中的每个字符,将字符对应的数组元素加1。
4. 使用字符串的indexOf方法找到第一个出现的该字符的位置,如果该位置等于当前位置,表示该字符只出现了一次,将该字符拼接到结果字符串中。
代码示例(使用字符串的方法):
```java
String str1 = "hello";
String str2 = "world";
String str3 = str1 + str2; // 合并字符串
int[] count = new int[256]; // ASCII码值的最大值为255,所以数组长度为256
String result = "";
for (char c : str3.toCharArray()) {
count[c]++; // 将字符对应的数组元素加1
if (str3.indexOf(c) == str3.lastIndexOf(c)) { // 如果字符只出现了一次
result += c; // 将该字符拼接到结果字符串中
}
}
System.out.println(result); // 输出结果
```
输出结果为:helowrd
代码示例(使用数组的方法):
```java
String str1 = "hello";
String str2 = "world";
String str3 = str1 + str2; // 合并字符串
int[] count = new int[256]; // ASCII码值的最大值为255,所以数组长度为256
char[] chars = str3.toCharArray(); // 将字符串转换为字符数组
String result = "";
for (int i = 0; i < chars.length; i++) {
count[chars[i]]++; // 将字符对应的数组元素加1
if (str3.indexOf(chars[i]) == i) { // 如果字符只出现了一次
result += chars[i]; // 将该字符拼接到结果字符串中
}
}
System.out.println(result); // 输出结果
```
输出结果为:helowrd
需要注意的是,使用字符串的方法中,indexOf方法的时间复杂度是O(n),所以总的时间复杂度是O(n^2);而使用数组的方法中,遍历字符数组的时间复杂度是O(n),所以总的时间复杂度是O(n)。同时,由于字符串的长度是可变的,所以使用字符串的方法可能会出现性能问题。
阅读全文