AcWing 90场杯赛
Q1 4806. 首字母大写 [Easy] 题解
Q2 4807. 找数字 [Medium] 题解
Q3 4808. 构造字符串 [Hard] 题解
Q1
给你一个字符串,如果首字符是小写,就把它改为大写。最后返回
思路
额😅😅
代码
1 | def solve(): |
复杂度分析
- 时间复杂度:O(1)
- 空间复杂度:O(1)
Q2
给定一个正整数 m 和一个非负整数 s。
请你找到长度为 m 且各位数字之和为 s 的最小和最大非负整数。
要求所求非负整数不得包含前导零。
思路
因为位数是固定的,所以直接从高位到低位贪心。
- 最小数:从高位到低位遍历,每次从最小值选择(最高位最小值为1,因为不能有前导0)。判断剩余的的数字能不能被剩余的位数填满,就是后面全填9看总和有没有大于m;如果小于,说明后面无论怎么填都不行。
- 最大数:从高位到低位遍历,每次都填9,如果剩余数字不满9,就填剩余的数字。
然后开头加两个特判:总和为0,位数只能小于等于1;如果所有位都填9还小于m,说明不可能实现。
代码
1 | def solve(): |
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
Q3
给定一个长度为 n 的由小写字母构成的字符串 t 以及一个整数 k。
请你构造一个字符串 s,要求:
- 字符串 s 恰好有 k 个子串等于字符串 t。
- 字符串 s 的长度尽可能短。
思路
简单来说,就是s后面再加上(k-1)个s。为了总长最小,所以每次添加的字符要最少。
即求出最长的,s的前缀和后缀相等的长度。
例如,s = “abab” 最长的是”ab”,2个字符长。三个就不行了,因为”aba” != “bab”。
对于这题数据量
n <= 50
,直接暴力遍历公共前后缀长度。
代码
1 | def solve(): |
复杂度分析
- 时间复杂度:O(n2)
- 空间复杂度:O(n)
Tips
当数据量大的时候,建议使用KMP,匹配公共前后缀。复杂度 O(n)
1 | def solve(): |
Comments
Comment plugin failed to load
Loading comment plugin