1576.替换所有的问号
‘?’
i==0
,成立条件:ch!=s[i+1]
i==s.size()-1
,成立条件:ch!=s[s.size()-2]
ch!=s[i-1]&&ch!=s[i+1]
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++)
{
if(i==0)
{
if(ch!=s[i+1]) s[i]=ch;
}
else if(i==s.size()-1)
{
if(ch!=s[s.size()-2]) s[i]=ch;
}
else
{
if(ch!=s[i-1]&&ch!=s[i+1]) s[i]=ch;
}
}
}
}
return s;
}
};
duration
,中毒时间为duration
duration
,中毒时间需要重置duration
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int ans=0;
for(int i=1;i<timeSeries.size();i++)
{
if(timeSeries[i]-timeSeries[i-1]>=duration) ans+=duration;
else ans+=timeSeries[i]-timeSeries[i-1];
}
return ans+duration;
}
};
d=2*numRows-2
d
,斜列和竖列之间的间隔为d-i*2
(i
是每一行)d=2*numRows-2
class Solution {
public:
string convert(string s, int numRows) {
int n=s.size();
string ans;
int d=2*numRows-2;
if(numRows==1) return s;
//第一行
for(int i=0;i<n;i+=d)
{
ans+=s[i];
}
//中间行
for(int i=1;i<numRows-1;i++)
{
for(int j=i;j<n;)
{
ans+=s[j];
int dd=d-i*2;
if(j+dd<n)
ans=ans+s[j+dd];
j+=d;
}
}
//最后一行
for(int i=numRows-1;i<n;i+=d)
ans+=s[i];
return ans;
}
};
1
11
21
1211
111221
312211
...
class Solution {
public:
string countAndSay(int n) {
string s="1";
for(int i=1;i<n;i++)
{
string t;
for(int right=0,left=0;right<s.size();)
{
while(right<s.size()&&s[left]==s[right]) right++;
t+=to_string(right-left)+s[left];
left=right;
}
s=t;
}
return s;
}
};
r
、o
、a
、k
找前驱字符是否在哈希表中存在: --
,当前字符个数++
-1
c
时:找最后一个字符k
是否在哈希表中存在: --
,当前字符c++
++
class Solution {
public:
int minNumberOfFrogs(string croakOfFrogs) {
string t="croak";
int n=t.size();
vector<int>hash(n); //数组模拟哈希表(记录t)
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]++; //c
}
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];
}
};