我一直在寻找这个答案一段时间。 我发现使用HashSet或LinkedHashSet删除重复的解决方案的数量,但他们都删除所有重复,我只寻找相邻的。 “ 说一个字符串是 ”ABBCDAABBBBBBBBOR“ 所需的结果应该是 ”ABCDABOR“,而不是 ”ABCDOR“ 难道这在O(n)为achived感谢如何在Java中删除字符串中的相邻副本
回答
肯定:?
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();
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();
}
O(n)的时间,是的,但O(n)的空间也。 StringBuilder resultBuilder的大小直接关系到String的大小。 我看到使它成为O(1)空间的唯一实用方式是,如果重复数据删除的字符串从不存储;您在处理时必须输出它。只要该方法必须返回一个单独的重复数据删除字符串,那么您将需要与输入字符串的大小直接相关的额外存储空间。 但是,如果输入是char数组,那么您可以重新使用传递的数组,但是所有的交换你会去O(n^2)的时间。 空间与时间一如既往。 –
好点,但用于存储结果的空间在空间复杂度分析中几乎总是被忽略。 – Default71721
这种方法正是我会写的东西。我认为OP是指我看到这个问题的时间,在我看到它之前根本没有想到空间。我假设这个问题来自一名学生,并认为我们应该提供最准确的答案。该算法使用的空间随输入字符串中的字符数量线性增加,因此O(n)。 O(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]));
- 1. php删除字符串中的副本
- 2. C:如何删除一维数组中的相邻副本?
- 3. 删除字符串中重复的相邻字符
- 4. 用于递归移除字符串中相邻副本的函数
- 5. 删除列表序言中的相邻副本
- 6. 递归删除列表中的相邻副本
- 7. 如何在Java中删除字符串中的字符?
- 8. 删除字符串中的 字符java
- 9. 从varchar列中删除前导的“副本”字符串
- 10. 从Java字符串中删除字符
- 11. 字符串中的相邻字母
- 12. 如何删除Java脚本中的一行字符串
- 13. Java - 如何删除字符串数组中的特殊字符?
- 14. 如何使用java删除字符串中的重复字符?
- 15. 在java字符串中删除url“
- 16. 删除ArrayList中的连续副本[Java]
- 17. 如何删除java中的二维数组中的副本?
- 18. 如何从java中的字符串中删除特定的字符串
- 19. 在java中删除字符串中的特殊字符?
- 20. 在Java中删除字符串中的重复字符
- 21. 在java中删除字符串中的字符
- 22. 如何删除字符串/文本框中的字符?
- 23. 如何从Unix shell脚本的字符串中删除字符?
- 24. Java:删除字符串中的注释
- 25. 删除Java字符串中的空格?
- 26. Java的字符串中删除数
- 27. 删除Java中的字符串
- 28. Java:删除字符串中的句号
- 29. 如何从脚本中的字符串中删除非字母?
- 30. 如何从java中的字符串中删除这些子字符串?
我真的想看到Java的8 +正则表达式的例子... – Jay