反转单词前缀
难度:
标签:
题目描述
代码结果
运行时间: 22 ms, 内存: 16.1 MB
// Java Stream Solution
// 思路:
// 1. 使用流来查找字符 ch 在字符串 word 中第一次出现的下标 i。
// 2. 如果找到字符 ch,使用流处理并反转相应部分的字符。
// 3. 将反转后的部分与剩余部分拼接,得到结果字符串。
import java.util.OptionalInt;
import java.util.stream.IntStream;
public class Solution {
public String reversePrefix(String word, char ch) {
OptionalInt optionalIndex = IntStream.range(0, word.length())
.filter(i -> word.charAt(i) == ch)
.findFirst();
if (!optionalIndex.isPresent()) {
return word;
}
int index = optionalIndex.getAsInt();
String reversedPart = new StringBuilder(word.substring(0, index + 1)).reverse().toString();
return reversedPart + word.substring(index + 1);
}
}
解释
方法:
解题思路:首先将输入的字符串转换为字符列表,以便进行原地修改。接着使用两个指针l(左指针)和r(右指针)来查找字符ch的第一次出现位置。l初始化为0,r从0开始向右移动,直到找到字符ch或者遍历完整个字符串。如果在字符串中找到了字符ch,则进行反转操作。具体的反转操作是通过'while l < r'循环进行的,在循环中交换l和r指向的字符,然后l向右移动一位,r向左移动一位,直至l不再小于r。最后,将字符列表转回字符串形式返回。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
解题思路中提到将输入字符串转换为字符列表以便进行原地修改,这种方式与直接在字符串上操作有何优势?
▷🦆
在查找字符ch的过程中,为什么选择只使用一个右指针r进行移动而不考虑从字符串两端同时搜索?
▷🦆
如果字符ch不存在于字符串中,返回的结果是原字符串还是进行了某种处理的字符串?代码中似乎没有明确指出。
▷🦆
请问在反转字符的过程中,使用`while l < r`循环的具体逻辑是如何确保所有需要反转的字符都被正确交换的?
▷