我一直在尋找這個答案一段時間。 我發現使用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