解题思路
这是一个字符串处理问题,需要在字符串中的数字前后添加星号。
关键点
-
输入规则:
- 字符串长度:
- 字符串中可能包含数字和字母
- 字符串长度:
-
处理要求:
- 在所有数字前后添加星号"*"
- 连续的数字视为一个整体
- 其他字符保持不变
实现思路
-
遍历字符串:
- 检查每个字符是否为数字
- 记录连续数字的起始和结束位置
-
添加星号:
- 在连续数字的开始添加一个星号
- 在连续数字的结束添加一个星号
代码
#include <iostream>
#include <string>
using namespace std;
string addStars(string str) {
string result;
bool inNumber = false;
for (int i = 0; i < str.length(); i++) {
if (isdigit(str[i])) {
if (!inNumber) {
result += '*'; // 数字开始,添加星号
inNumber = true;
}
result += str[i];
// 检查是否是最后一个字符或下一个字符不是数字
if (i == str.length() - 1 || !isdigit(str[i + 1])) {
result += '*'; // 数字结束,添加星号
inNumber = false;
}
} else {
result += str[i];
}
}
return result;
}
int main() {
string str;
while (getline(cin, str)) {
cout << addStars(str) << endl;
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str = sc.nextLine();
System.out.println(addStars(str));
}
}
public static String addStars(String str) {
StringBuilder result = new StringBuilder();
boolean inNumber = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isDigit(c)) {
if (!inNumber) {
result.append('*');
inNumber = true;
}
result.append(c);
if (i == str.length() - 1 || !Character.isDigit(str.charAt(i + 1))) {
result.append('*');
inNumber = false;
}
} else {
result.append(c);
}
}
return result.toString();
}
}
def add_stars(s):
result = []
in_number = False
for i in range(len(s)):
if s[i].isdigit():
if not in_number:
result.append('*') # 数字开始,添加星号
in_number = True
result.append(s[i])
# 检查是否是最后一个字符或下一个字符不是数字
if i == len(s) - 1 or not s[i + 1].isdigit():
result.append('*') # 数字结束,添加星号
in_number = False
else:
result.append(s[i])
return ''.join(result)
while True:
try:
s = input()
print(add_stars(s))
except:
break
算法及复杂度
算法分析
-
遍历过程:
- 逐字符检查是否为数字
- 使用标志位记录是否在数字序列中
- 在适当位置添加星号
-
字符串处理:
- 动态构建结果字符串
- 处理连续数字的边界情况
复杂度分析
- 时间复杂度:
- 其中
是字符串长度,只需要遍历一次
- 空间复杂度:
- 需要存储处理后的字符串