一、什么是模拟
模拟是对真实事物或者过程的虚拟。在编程时为了实现某个功能,可以用语言来模拟那个功能,模拟成功也就相应地表示编程成功。
二、模拟算法的特点和技巧
特点:
-
代码量大
-
操作多
-
思路复杂
-
较为复杂的模拟题出错后难定位错误
技巧:
-
在动手写代码之前,在草纸上尽可能地写好要实现的流程.
-
在代码中,尽量把每个部分模块化,写成函数、结构体或类
-
对于一些可能重复用到的概念,可以统一转化,方便处理:如,某题给你"YY-MM-DD 时:分" 把它抽取到一个函数,处理成秒,会减少概念混淆
-
调试时分块调试。模块化的好处就是可以方便的单独调某一部分
-
写代码的时候一定要思路清晰,不要想到什么写什么,要按照落在纸上的步骤写
三、模拟OJ题
3.1、替换所有的问号
算法思路
纯模拟。从前往后遍历整个字符串,找到问号之后,就⽤ a ~ z 的每⼀个字符去尝试替换即可。
算法代码
class Solution {
public:
string modifyString(string s) {
for(int i = 0; i<s.size(); i++)//遍历每一个字符
{
if(s[i] == '?')
{
for(char ch = 'a'; ch <= 'z'; ch++)//a ~ z都试试
{
if(i == 0 && ch != s[i+1]) //头位置是'?',不能和后一个相等
s[i] = ch;
else if(i == s.size()-1 && ch != s[i-1])//尾位置是'?' ,不能和前一个相等
s[i] = ch;
else if(ch != s[i+1] && ch != s[i-1]) //中间情况, 不能和两边相等
s[i] = ch;
}
}
}
return s;
}
};