模拟就是对某一个过程进行简单的演算,通过找到一定的规律,来简化代码,提高时间复杂度等。



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||ch!=s[i-1])&&(i==n-1||ch!=s[i+1])){
s[i]=ch;
break;
}
}
}
}
return s;
}
};


class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int ans = 0;
int expired = 0;
for (int i = 0; i < timeSeries.size(); ++i) {
if (timeSeries[i] >= expired) {
ans += duration;
} else {
ans += timeSeries[i] + duration - expired;
}
expired = timeSeries[i] + duration;
}
return ans;
}
};




class Solution {
public:
string convert(string s, int a) {
if(a==1) return s;
string ret;
int d=2*a-2;
int n=s.size();
for(int i=0;i<n;i+=d){
ret+=s[i];
}
for(int k=1;k<a-1;k++){
for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d){
if(i<n) ret+=s[i];
if(j<n) ret+=s[j];
}
}
for(int i=a-1;i<n;i+=d){
ret+=s[i];
}
return ret;
}
};



class Solution {
public:
string countAndSay(int n) {
string ret="1";
for(int i=1;i<n;i++){
string a;
for(int left=0,right=0;right<ret.size();){
while(right<ret.size()&&ret[left]==ret[right]) right++;
a+=to_string(right-left)+ret[left];
left=right;
}
ret=a;
}
return ret;
}
};



class Solution {
public:
int minNumberOfFrogs(string croakOfFrogs) {
string t="croak";
int n=t.size();
vector<int> hash(n);
unordered_map<char,int> index;
for(int i=0;i<n;i++)
index[t[i]]=i;
for(auto ch: croakOfFrogs){
if(ch=='c'){
if(hash[n-1]!=0) hash[n-1]--;
hash[0]++;
}else{
int i=index[ch];
if(hash[i-1]==0) return -1;
hash[i-1]--;
hash[i]++;
}
}
for(int i=0;i<n-1;i++){
if(hash[i]!=0) return -1;
}
return hash[n-1];
}
};
期待下次交流!!!