这周打了CF
愚人节的那场我就不写题解了... ...好吧?
#780 场
补题
大致题意
我有一个字符串,我想要它变成“ttaabb”、“aabbbbccccccccbbbbaa”、“”(空字符串)之类的模样,也就是str[i] == str[i + 1](i % 2 == 0,下标从0开始)
如果我给的字符串不是这种形式的,那么我就要删几个字符,让它变成这种形式的。
问:我至少要删除多少个字符才能让它变成我想要的样子?
解题思路
贪心。我们去遍历这个字符串的时候,用一个数组或者map记录一下每个字符出现的次数,当顺序从左到右过去遍历的时候,出现字符次数先为2的,保留它们,删除它们之间的,或是它们之前的字符,这样是最优解,当遍历结束后,删除它们之后不成对的字符(遍历过程中成对的都已经被跳过删除了,因为我们之前删除的是“在它们之间或前面不成对的字符”,因此我们还要删除后面的不成对的字符串)。比如下面这个例子:
abccabee
如果根据删除规则,它应该变成ccee
我删除了'a' 'b' 'a' 'b',当i == 3时,我记录到vis['c'] == 2,那么我就删掉了它们一对之前的字符'a' 'b',后面删除的'a' 'b'同理
还有下面这个例子:
abcdefab
根据删除规则,它变成了aa
'b'是多余的不成对的,因此它被删除。
输出我们只要把原长度减去现长度就可以获得删掉的长度了。
复盘
那么,我为什么比赛的时候没做出来嘞?
因为我把这道题做的太复杂了。
嗯。
我写的很长,然后也写到了跟“贪心”差不多的代码,但是WA了
总的来说,就是写复杂了,想复杂了
这周还学了JAVA
把JAVA基本的学完了,然后自己写了一些程序来练习
然后因为要写项目,于是就试着画了一个很丑很丑的框框然后运行了起来... ...
好像就没有什么其他特别的了。
新一周的目标
因为发现JAVA的内容有点多,所以这周打算JAVAFX面向CSDN、BiliBili编程,打算是边做项目边学,不会的就问。
然后这周也有CF,努力做到C题把C题做出来吧。