前言
在算法的领域中,模拟算法通过构造计算机模型,基于初始条件和演化规则,对现实系统进行仿真与预测。其灵魂在于以细腻的步骤、真实的推演再现复杂的系统演化,常用于交通流量模拟、粒子运动追踪及社会系统建模等场景。
一、模拟算法的核心概念
模拟算法(Simulation Algorithm)的关键特点包括:
- 基于规则驱动:每一步计算遵循明确的规则。
- 逐步演化:从初始状态开始,逐步推进模拟过程。
- 近似真实:通过迭代逼近真实世界的运行模式。
模拟算法通常包括以下步骤:
模型构建:定义系统的状态变量、规则与初始条件。 数据输入:为模拟提供初始参数与边界条件。 迭代执行:按照规则更新系统状态,直至满足终止条件。 结果分析:收集和分析输出数据以解释或预测系统行为。
下面结合具体题目加以分析。
二、替换所有问号
2.1 题目链接
https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/
2.2 题目分析
- 给定字符串,要求把?替换为小写字符。
- 替换后,字符串内不能存在连续重复字符。
- 题目保证初始情况下不存在连续重复字符。
2.3 思路讲解
模拟该场景。从前往后遍历整个字符串,找到问号之后,就用 a ~ z 的每一个字符去尝试替换即可。
注意:
当问号位于左边界时,只需要考虑问号右侧的元素。 当问号位于右边界时,只需要考虑问号左侧的元素。
2.4 代码实现
class Solution {
public:
string modifyString(string s) {
int n = s.size(); // 数组元素个数
for (int i = 0; i < n; i++) {
if (s[i] == '?') {
for (char ch = 'a'; ch <= 'z'; ch++) {
if ((i == 0 || s[i - 1] != ch) && (i == n - 1 || s[i + 1] != ch)) {
s[i] = ch; // 尝试替换
}
}
}
}
s;
}
};


