第一题 替换所有问号
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
string modifyString(string s) {
string ret;
for(int i=0;i<s.size();i++)
{
if(i==0)
{
if(s[i]=='?'&&i+1<s.size())
{
for(char a='a';a<='z';a++)
{
if(a!=s[i+1])
{
ret+=a;
break;
}
}
}
else if(i+1>=s.size()) ret+='a';
else ret+=s[i];
}
else
{
if(s[i]=='?')
{
for(char a='a';a<='z';a++)
{
if(ret[i-1]!=a&&i+1<s.size()&&s[i+1]!=a)
{
ret+=a;
break;
}
if(i+1>=s.size()&&ret[i-1]!=a)
{
ret+=a;
break;
}
}
}
else ret+=s[i];
}
}
return ret;
}
};
第二题 提莫攻击
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int total=0;
total+=duration;
for(int i=1;i<timeSeries.size();i++)
{
int x=timeSeries[i]-timeSeries[i-1];//计算中毒时间的差值来判断中毒伤害的叠加
if(x<duration) total+=x;
else total+=duration;
}
//total+=3;
return total;
}
};
第三题 字形变换
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1) return s;//这里不进行特判一定会超时
string ret;
int d=(numRows-1)*2;//画图观察第一行的间距差
for(int i=0;i<s.size();i+=d)//先处理第一行
{
ret+=s[i];
}
int y=d-1;//第i行第二个数字
for(int i=1;i<numRows-1;i++)//第i行,是numsRows而不是s数组的size
{
for(int j=i,k=d-j;j<s.size()||j<s.size();j+=d,k+=d)//此处一共需要两组数据,特别注意
{
if(j<s.size())
ret+=s[j];
if(k<s.size())
ret+=s[k];
}
}
for(int i=numRows-1;i<s.size();i+=d)
{
ret+=s[i];
}
return ret;
}
};
// class Solution {
// public:
// string convert(string s, int numRows) {
// if (numRows < 2)
// return s;
// vector<string> rows(numRows);
// int i = 0, flag = -1;
// for (char c : s) {
// rows[i].push_back(c);
// if (i == 0 || i == numRows -1)
// flag = - flag;
// i += flag;
// }
// string res;
// for (const string &row : rows)
// res += row;
// return res;
// }
// };