前言:模拟题的特点在于没有什么固定的技巧,完全考验自己的代码能力,因此有助于提升自己的代码水平。如果说一定有什么技巧的话,那就是有的模拟题能够通过找规律来简化算法。
一:替换所有问号
题目要求:
解题思路:
思路:首先遍历字符串s找寻字符 '?';找到后,将'a'拷贝给该位置并循环++,直到中间字母和左右字母均不相同。
细节:左端点和右端点需要单独考虑
实现代码:
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 || ch != s[i-1]) && (i == n-1 || ch != s[i+1]))
{
s[i] = ch;
break;
}
}
}
}
return s;
}
分析:if((i == 0 || ch != s[i-1]) && (i == n-1 || ch != s[i+1])); 该串代码
一个条件涵盖三种情况:
①:左端点 i == 0; ch != s[i+1];
②:右端点 i == n-1;ch !=s[i-1];
③:中间点 ch !=s[i-1];ch != s[i+1];
学无止境 :-(