题目ID :L1-058
分数 :15分
语言:Java / Python
题目描述
"666"是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字"9",意思是"6翻了",实在太厉害的意思。本题就请你编写程序,将那些过时的、只会用"666"的人用"9"来替代吧。
输入格式
输入在第一行给出一个长度不超过 10000 的、仅由英文字母构成的非空字符串。
输出格式
在一行中输出替换后的字符串。
输入样例
wanwusanguanzhisanbaigaolaosongjiulao
输出样例
9wusanguanzhisanbaigaolaosong9lao
解题思路
- 遍历字符串中的每个字符
- 如果遇到字符 '6',统计连续出现的个数
- 如果连续出现3个或更多个'6',用 '9' 替换整个连续的 '6' 串
- 否则保持原样输出
关键点:需要处理连续的多个 '6',用 '9' 一次性替换整个连续段。
代码实现
Java
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
StringBuilder sb = new StringBuilder();
int i = 0;
while (i < s.length()) {
if (s.charAt(i) == '6') {
int count = 0;
while (i < s.length() && s.charAt(i) == '6') {
count++;
i++;
}
if (count >= 3) {
sb.append('9');
} else {
for (int j = 0; j < count; j++) {
sb.append('6');
}
}
} else {
sb.append(s.charAt(i));
i++;
}
}
System.out.println(sb.toString());
}
}
Python
python
s = input()
result = []
i = 0
while i < len(s):
if s[i] == '6':
count = 0
while i < len(s) and s[i] == '6':
count += 1
i += 1
if count >= 3:
result.append('9')
else:
result.append('6' * count)
else:
result.append(s[i])
i += 1
print(''.join(result))
运行验证
| 样例输入 | 样例输出 | 结果 |
|---|---|---|
| wanwusanguanzhisanbaigaolaosongjiulao | 9wusanguanzhisanbaigaolaosong9lao | ✅ |
复杂度分析
- 时间复杂度:O(n),遍历字符串一次
- 空间复杂度:O(n),存储结果字符串
总结
本题主要考察字符串的遍历和连续字符的处理。核心算法:
- 使用指针遍历字符串
- 遇到连续 '6' 时统计个数
- 根据连续个数决定输出 '9' 还是原字符