Leetcode Weekly Contest 420

楼主: oin1104 (是oin的说)   2024-10-20 12:50:56
https://i.imgur.com/VULhdUt.png
问就是冲击Guardian

Q1
一开始有个空的字串跟target
有两种操作
1 在右边加上a
2 让右边的字母++
要把空字串
把所有操作后的字串记录下来回传
思路:
暴力的从右边慢慢加
同时纪录
class Solution {
public:
vector<string> stringSequence(string target)
{
vector<string> res ;
string now ;
int n = target.size();
for(int i = 0 ; i < n ; i ++)
{
now.push_back('a');
res.push_back(now);
while(now[i] < target[i])
{
now[i]++;
res.push_back(now);
}
}
return res;
}
};
Q2
有多少个子字串
里面至少有一个字母重复k次
思路:
因为字串长度比较小
所以直接暴力检查
class Solution {
public:
int numberOfSubstrings(string s, int k)
{
int res = 0;
int n = s.size();
for(int i = 0 ; i < n ; i ++)
{
vector<int> save(26,0);
int ok = 0;
for(int j = i ; j < n ; j ++)
{
save[s[j]-'a'] ++;
if(save[s[j]-'a'] >= k)ok = 1;
if(ok) res++;
}
}
return res;
}
};
Q3
要让一个阵列变成递增
可以把数字除以他的最大因子
请问要几次才可以
不行的话就回传-1
思路:
做个回传最小因子的函式
然后把那个数字除以最小因子
就会是最大因子
然后从后面开始检查
只要一个不符合
就不行
class Solution {
public:
int gpd(int k)
{
for(int i = 2 ; i <= sqrt(k) ; i ++)
{
if(k%i == 0)return i;
}
return k;
}
int minOperations(vector<int>& nums)
{
int res = 0 ;
int n = nums.size();
for(int i = n-1 ; i > 0 ; i

Links booklink

Contact Us: admin [ a t ] ucptt.com