解题思路

这是一个字符串处理问题,需要在字符串中的数字前后添加星号。

关键点

  1. 输入规则:

    • 字符串长度:
    • 字符串中可能包含数字和字母
  2. 处理要求:

    • 在所有数字前后添加星号"*"
    • 连续的数字视为一个整体
    • 其他字符保持不变

实现思路

  1. 遍历字符串:

    • 检查每个字符是否为数字
    • 记录连续数字的起始和结束位置
  2. 添加星号:

    • 在连续数字的开始添加一个星号
    • 在连续数字的结束添加一个星号

代码

#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

算法及复杂度

算法分析

  1. 遍历过程:

    • 逐字符检查是否为数字
    • 使用标志位记录是否在数字序列中
    • 在适当位置添加星号
  2. 字符串处理:

    • 动态构建结果字符串
    • 处理连续数字的边界情况

复杂度分析

  • 时间复杂度: - 其中 是字符串长度,只需要遍历一次
  • 空间复杂度: - 需要存储处理后的字符串