我一直在寻找这个答案。 我已经找到了许多使用HashSet或LinkedHashSet删除重复项的解决方案,但它们都删除了所有重复项,我只查找相邻的重复项。 " 说一个字符串是" ABBCDAABBBBBBBBOR" 所需的结果应该是" ABCDABOR"而不是" ABCDOR"。 这可以在O(n)中实现吗?感谢。
答案 0 :(得分:3)
不确定
StringBuilder sb = new StringBuilder();
char[] chars = text.toCharArray();
char previous = chars[0];
sb.append(chars[0]);
for(int i = 1 ; i < chars.length ; i++) {
if(chars[i] != previous) {
sb.append(chars[i]);
previous = chars[i];
}
}
String res = sb.toString();
答案 1 :(得分:1)
O(n)时间解决方案:
public String removeAdjacentDuplicates(String s) {
StringBuilder resultBuilder = new StringBuilder();
char previous = s.charAt(0);
resultBuilder.append(previous);
for (int i = 1; i < s.length(); i++) {
char current = s.charAt(i);
if (previous != current) {
resultBuilder.append(current);
previous = current;
}
}
return resultBuilder.toString();
}
答案 2 :(得分:1)
我刚刚开始使用溪流,所以请耐心等待......
public static String removeAdjacentDuplicates(String input) {
if (input.length() <= 1) {
return input;
}
StringBuilder sb = new StringBuilder();
sb.append(input.charAt(0));
IntStream.range(1, input.length())
.mapToObj(i -> input.charAt(i) != input.charAt(i - 1) ? input.charAt(i) : "")
.forEach(sb::append);
return sb.toString();
}
或者如果这更像你的风格而不是StringBuilder:
return input.charAt(0) + String.join("",
IntStream.range(1, input.length())
.mapToObj(i -> input.charAt(i) != input.charAt(i - 1) ?
String.valueOf(input.charAt(i)) : "")
.toArray(size -> new String[size]));
答案 3 :(得分:1)
这是一个使用Java的完整解决方案。
public class Occurence2 {
public static void main(String[] args) {
// String a = "ABBCDAABBBBBBBBOR"; //ABCDABOR
String a = "GiiinnnniiiiiGinnnaPrrooottijayyyi";//GiniGinaProtijayi
fix(a);
}// amin
private static void fix(String a) {
StringBuffer sbr = new StringBuffer();
for (int i = 0; i < a.length(); i++) {
char ch = a.charAt(i);
if (sbr.length() == 0) {
sbr.append(ch);
}
if (ch == sbr.charAt(sbr.length() - 1)) {
i++;
} else {
sbr.append(ch);
}
}
System.out.println(sbr);
}// fiix
}
如果您不想使用StringBuffer,那么您只需使用空字符串。
public class Test6 {
public static void main(String[] args) {
String a = "GiiinnnniiiiiGinnnaPrrooottijayyyi";
fix(a);
}
private static void fix(String a) {
String res = "";
int i = 0 ;
while(i < a.length()) {
char ch = a.charAt(i);
if(res.length() == 0 ) {res += ch ;}
if(ch == res.charAt(res.length() -1)) {i++ ;}
if(ch != res.charAt(res.length() -1)) {res += ch ;}
}//while
System.out.println(res);
}//fix
}
Python中的解决方案:
a = "GiniiiiGinaaaPrrrottiijayi"
reslist =[]
for ch in a:
if(len(reslist) == 0 or ch != reslist[-1]):reslist.append(ch)
print(reslist)
print(''.join(reslist))