【每日刷题】Day137
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 1576. 替换所有的问号 - 力扣(LeetCode)
2. 495. 提莫攻击 - 力扣(LeetCode)
1. 1576. 替换所有的问号 - 力扣(LeetCode)
//思路:模拟+哈希。
//照葫芦画瓢,题目要求什么我们就做什么。
//题目的意思非常明确,将字符串 s 中的所有 '?' 变为小写字母,但是不能和它的前一个以及后一个的字母相同。
//这里我们遍历字符串s,每次遍历用一个新的哈希表来记录。如果当前字符为 '?',则记录一下它的前一个以及后一个字符,在哈希表中记为1。随后遍历哈希表中小写字母的下标,遍历到为 0 说明当前字母没被记录,用其替换 '?'。
class Solution {
public:
string modifyString(string s)
{
for(int i = 0;i<s.size();i++)
{
int hash[128] = {0};//哈希数组记录
if(s[i]=='?')
{
if(i-1>=0) hash[s[i-1]] = 1;
if(i+1<s.size()) hash[s[i+1]] = 1;//记录 '?' 字符的前一个以及后一个字符
for(int j = 97;j<=122;j++)//随后遍历小写字母的下标,用没有记录的字符替换 '?'
if(!hash[j]) s[i] = j;
}
}
return s;
}
};
2. 495. 提莫攻击 - 力扣(LeetCode)
//思路:模拟。
//遍历数组时我们只需要判断,当前秒我们给艾希挂上毒时,在毒的持续时间内我们是否重复挂上毒。也就是说,在前一个毒结束之前,我们是否又挂上了新的毒。
//如果 当前秒数 + 毒的持续时间 - 1 < 下一个秒数,说明在下一次挂毒之前,当前挂的毒已经失效,此时我们直接加上 duration
//如果 当前秒数 + 毒的持续时间 - 1 >= 下一个秒数,说明在下一次挂毒之前,当前挂的毒还没有失效,此时如果我们重新挂毒,则会浪费掉剩余的中毒时间。
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration)
{
int ans = 0,time = duration;
for(int i = 0;i<timeSeries.size()-1;i++)//注意这里我们不遍历到最后一个秒数,因为最后一秒的中毒时间一定是完全利用上的,因此为了防止数组越界访问,我们这里访问到到数第二个,只需要在最后的结果 + duration 就是答案。
{
if(timeSeries[i]+duration-1<timeSeries[i+1]) ans+=duration;
else ans+=(duration-(duration-timeSeries[i+1]+timeSeries[i]));//具体浪费的中毒时间就是 duration - (duration - 两个秒数的差值)
}
return ans+duration;
}
};