C++ 笔试刷题 Day 16
今天整理了三道经典的 C++ 算法题,涵盖字符串处理、数字逻辑和滑动窗口。咱们直接过一遍思路和代码。
一、字符串替换
题目描述
给定一个字符串 A 及其长度 n,以及一个字符数组 arg 和元素个数 m。要求在 A 中找到所有的 %s 占位符,并依次用 arg 中的字符进行替换。
思路分析
这题其实不难,核心逻辑很直观:遍历原字符串,遇到 %s 就取下一个可用字符填入结果串。没必要原地修改,新建一个结果串 ret 更稳妥。
注意点:
%s的数量可能少于arg中的字符数量,多余的字符也要追加到结果末尾。- 循环边界要处理好,避免越界。
代码实现
class StringFormat {
public:
string formatString(string A, int n, vector<char> arg, int m) {
string ret;
int sz = A.size();
int k = 0;
for (int i = 0, j = 1; j < sz; i++, j++) {
if (A[i] != '%' || A[j] != 's') {
ret += A[i];
} else {
ret += arg[k++];
i++;
j++; // 跳过已匹配的 s
}
}
// 处理最后一个字符,防止漏掉非 %s 结尾的情况
if (sz > 1 && A[sz - 2] != '%') {
ret += A[sz - 1];
}
while (k < arg.size()) {
ret += arg[k++];
}
return ret;
}
};


