小红的 red 串
[题目链接](https://www.nowcoder.com/practice/b8e19a2c1d454a8897f2155d74304185)
思路
字符串仅由 'r'、'e'、'd' 三种字符组成,要求同时进行如下替换:
'r'→'e''e'→'d''d'→'r'
由于变化是同时发生的,不能原地逐个替换后影响后续字符(实际上这里每个字符的替换互不影响,因为每个字符只看自身原始值)。直接遍历字符串,对每个字符按映射关系输出即可。
样例演示
输入 "rredd":
r→er→ee→dd→rd→r
输出 "eedrr",与预期一致。
代码
class Solution {
public:
string change(string mystr) {
for (int i = 0; i < mystr.size(); i++) {
if (mystr[i] == 'r') mystr[i] = 'e';
else if (mystr[i] == 'e') mystr[i] = 'd';
else mystr[i] = 'r';
}
return mystr;
}
};
import java.util.*;
public class Solution {
public String change(String mystr) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mystr.length(); i++) {
char c = mystr.charAt(i);
if (c == 'r') sb.append('e');
else if (c == 'e') sb.append('d');
else sb.append('r');
}
return sb.toString();
}
}
复杂度分析
- 时间复杂度:
,其中
为字符串长度。遍历一次字符串即可完成替换。
- 空间复杂度:
。C++ 原地修改输入字符串,额外空间
;Java 使用
StringBuilder构造新字符串,需要空间。

京公网安备 11010502036488号