一 . 问题描述
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
- 例如,如果
word = "abcdefd"且ch = "d",那么你应该 反转 从下标 0 开始、直到下标3结束(含下标3)。结果字符串将会是"dcbaefd"。
二 . 解题思路
-
查找字符位置:遍历字符串
word,找到第一个出现字符ch的位置temp。 -
处理未找到的情况:如果
temp仍然是 0(即没有找到ch或者ch是第一个字符),直接返回原字符串。 -
反转前缀:从
temp位置开始反向遍历到字符串开头,将字符依次添加到StringBuilder中。 -
添加剩余部分:从
temp + 1位置开始遍历到字符串末尾,将剩余字符添加到StringBuilder中。 -
返回结果:将
StringBuilder转换为字符串并返回。
三 . 解题过程
public String reversePrefix(String word, char ch) {
int temp = 0;
StringBuilder s = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == ch) {
temp = i;
break;
}
}
if (temp == 0) {
return word;
}
for (int i = temp; i >= 0; i--) {
s.append(word.charAt(i));
}
for (int i = temp+1; i < word.length(); i++) {
s.append(word.charAt(i));
}
return s.toString();
}
四 . 时间复杂度和空间复杂度
1 . 时间复杂度是 O(n)。
2 . 空间复杂度是 O(n)。
五. 自我反思(优化建议)
-
合并循环:可以在找到
ch的位置后,直接在一个循环中完成反转前缀和添加剩余部分的操作,减少代码量。 -
提前终止:在查找
ch时,一旦找到就可以立即开始反转和拼接,而不需要完全遍历整个字符串(虽然break已经实现了这一点)。 -
使用内置方法:可以尝试使用
String的substring和StringBuilder的reverse方法来简化代码。
8万+

被折叠的 条评论
为什么被折叠?



