https://kamacoder.com/problempage.php?pid=1064

<aside> 💡

思路:

  1. 先扫一次字符串统计数字的个数
  2. 之后统一扩大字符串size
  3. 使用双指针移动元素,快指针从旧字符串尾开始移动,慢指针从扩充后的尾部开始移动
string replaceDigital(string s){
    // 先扫一遍统计数字的个数
    int count = 0;
    for (char c : s) {
        if (c >= '0' && c <= '9') {
            ++count;
        }
    }

    // 统一扩充s的size
    string replace = "number";
    int oldSize = s.size();
    int newSize = oldSize + count * replace.size() - count;
    s.resize(newSize);

    // 快慢指针移动元素,从尾部开始移动
    int slow = newSize - 1;
    int fast = oldSize - 1;

    while (fast >= 0) {
        if (s[fast] >= 'a' && s[fast] <= 'z') {
            // 小写字母直接移动
            s[slow--] = s[fast--];
        } else {
            // 数字替换为"number"
            for (int i = 0; i < replace.size(); ++i) {
                s[slow - replace.size() + 1 + i] = replace[i];
            }
            slow -= replace.size();
            --fast;
        }
    }
    return s;
}