11 solutions
-
0
题面描述:
小明有根绳子,上面挂满了玻璃球,玻璃球的颜色有红、绿、蓝三种,分别用字符
r
、g
、b
表示,红色球的得分为1分,绿色球为2分,蓝色球为3分。此外,若某个球的颜色与前面的球相同,则会额外获得奖励分,具体来说,与前面1个球相同奖励1分,与前面2个球都相同奖励2分,以此类推。给定一串由这些字符组成的字符串,任务是计算这串玻璃球的总得分。思路:模拟遍历
由于string的长度只有1e4,可以直接暴力做,n^2也只有1e8,小常数1s内可以跑完。直接往前遍历有几个字符和它相同即可。
或者基于简单dp的方式,每个位置保存它前面与它相等且串联的字符数量,每个字符只需要看其是否与上一个字符相等即可,相等则加1,否则置为0。
题解
本题要求计算一串由红、绿、蓝玻璃球组成的字符串的总得分。每种颜色的玻璃球对应不同的基础分数,其中红色球为1分,绿色球为2分,蓝色球为3分。此外,当一个球的颜色与前面的球相同时,会获得额外的奖励分数。具体来说,如果一个球与前面的第n个球颜色相同,将获得n-1分的奖励。
由于字符串的最大长度为10,000,暴力算法的复杂度为O(n^2),在最坏情况下的操作次数为1亿,这在1秒内是可以接受的。因此,我们可以采用暴力方式逐个比较字符,也可以基于动态规划的思想来优化。
以下是基于暴力法的实现思路:
- 遍历字符串中的每一个字符。
- 对于每个字符,向前遍历其之前的字符,判断是否与当前字符相同。
- 若相同,则根据相同的数量增加得分;若不相同,则停止继续向前查找。
- 每个字符的基础得分加到总得分中。
- 输出最终得分。
JavaScript
Java
Python
C++
- 1
Information
- ID
- 74
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 1
- Tags
- # Submissions
- 619
- Accepted
- 235
- Uploaded By