字符串去重
String text = “GHEXADDBSOIJEHDNABLFJSQZXXAA”
对以上字符串进行去重,并保证字符串内字母的前后顺序不变,例如:“BBAABC"输出结果为"BAC”
关键点:
1.一个元素只出现一次,如果在不让使用HashSet 的容器的情况下,那怎么解决这个问题呢?
可以使用数组桶,比如 如果A元素出现了一次,那么我就让int[‘A’] = 1.
下次往结果里面添加的时候,判断一下int[‘A’] 是不是等于1 就知道这个元素之前有没有出现过。这种是肯定申请内存去记忆的,如果不让使用Map、Set,那么只能用数组桶。
2.我怎么知道结果字符串的长度?
使用StringBuffer
解决方法:
public static String main(String text) {
char[] str = text.toCharArray();
int[] bucket = new int[128];
StringBuilder stringBuilder = new StringBuilder();
for (char c : str) {
if (bucket[c] == 0) {
stringBuilder.append(c);
bucket[c] ++;
}
}
return stringBuilder.toString();
}
我的解决方法:
public String main(String text) {
char[] str = text.toCharArray();
int size = str.length;
char[] result = new char[size];
char cur = str[0];
result[0] = cur;
int curIndex = 1;
for (int i = 1, i<size;i++){
if (cur != str[i]) {
result[curIndex++] = str[i];
cur = str[i];
}
}
return new String(result);
}
}
上面是有问题的,记录我面试的时候的写法,关键在于,没有看清楚题意,一个元素只出现一次。
参考:
https://blog.51cto.com/wait0804/1900000