[英]How do i reverse each character in a string?
class Solution {
public String reverseWords(String s) {
int count = 0;
int current = 0;
StringBuilder build = new StringBuilder();
for(int i = 0; i< s.length(); i++){
count++;
current = count;
if(s.charAt(i) == ' '){
while(current > 0){
build.append(s.charAt(current - 1));
current--;
}
build.append(s.charAt(i));
}
}
return build.toString();
}
}
我無法理解為什么這不起作用。 我經歷了幾次整個代碼,但似乎有一個問題。
輸入: "Let's take LeetCode contest"
我的答案: " s'teL ekat s'teL edoCteeL ekat s'teL "
正確答案: "s'teL ekat edoCteeL tsetnoc"
最新情況如何?
有幾個問題:
您將current
位置設置為當前位置,然后向下迭代到0追加字符。 而不是下降到0,你迭代直到最后一個單詞的開頭。 替代方案,迭代直到前一個' '
字符。
你只看到一個' '
字符后附加一些東西。 在句子結尾會發生什么? 當i
查看最后一個單詞中的字母時,將不再有' '
字符,因此最后一個單詞永遠不會被附加。 要處理這種情況,您需要在for循環之后添加一些邏輯來檢查是否存在未寫入的單詞,並將其反轉。
一種更簡單的方法是利用StringBuilder
在某個位置插入字符的能力。 您可以跟蹤當前單詞的開始位置,並在迭代字符時插入,如果它不是' '
,或者附加' '
並重置插入位置。
StringBuilder build = new StringBuilder();
int current = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == ' ') {
build.append(' ');
current = i + 1;
} else {
build.insert(current, c);
}
}
return build.toString();
使用StringBuilder來反轉String中的每個單詞:
String input = "Let's take LeetCode contest";
String[] split = input.split(" +");
StringBuilder output = new StringBuilder();
for (int i = 0; i < split.length; i++) {
output.append(new StringBuilder(split[i]).reverse());
if(i<input.length()-1)
output.append(" ");
}
System.out.println(output);
首先,跳過索引0.將這些行放在方法的末尾以避免這種情況:
count++;
current = count;
您可能需要一個變量來跟蹤當前單詞的開始位置。 例如,像count和current一樣聲明一個:
int wordStart = 0;
然后,當您處理完一個單詞后,將wordStart設置為指向下一個單詞的第一個字符。 我會把它放在while循環之后,這里:
build.append(s.charAt(i));
wordStart = count + 1;
你還需要改變這個: while(current > 0){
to this: while(current >= wordStart)
另外:你不需要數數。 變量i完全相同。
您可以使用stream-api來實現目標:
Stream.of(str.split(" "))
.map(s -> new StringBuilder(s).reverse().toString())
.reduce((s1, s2) -> s1 + " " + s2)
.orElse(null);
這是簡單的方法:
return Arrays.stream(s.split(" " ))
.map(StringBuilder::new)
.map(StringBuilder::reverse)
.map(StringBuilder::toString)
.collect(Collectors.joining(" "));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.