Re: [闲聊] 每日leetcode

楼主: sustainer123 (caster)   2025-01-13 17:48:42
※ 引述 《Meaverzt (单推凛宝)》 之铭言:
:  
: 题目
:  
: 有一个字串s
:  
: 对每个index我们都要找左边跟右边最近出现过的s[index]把他删掉
:  
: 如果没有就不用理他
:  
: 最后回传字串的长度
:  
: 思路:
:  
: 去计算每个字出现过几遍
:  
: 总共会有三种情况
:  
: 1.出现少于3遍:没办法继续简化 答案长度加上出现的次数
:  
: 2.出现奇数遍:因为每次简化长度会减2 所以最后答案长度+1 eg:aaaaa最后会只剩a
:  
: 3.出现偶数遍:答案长度+2 eg:aaaa最后会剩aa
:  
: 每个字跑完长度加起来就是答案了
:  
: Code:
:  
: class Solution(object):
: def minimumLength(self, s):
:  
: dict={}
: for i in s:
: if i not in dict:
: dict[i]=1
: else:
: dict[i]+=1
: ans=0
: for i in dict:
: if dict[i]<3:
: ans+=dict[i]
: else:
: ans+=2 if dict[i]%2==0 else 1
: return ans
思路:
差不多
奇数能减到剩一个 偶数能减到剩两个
长度扣掉能扣的就是答案
Python Code:
class Solution:
def minimumLength(self, s: str) -> int:
record = [0] * 26
n = len(s)
for c in s:
record[ord(c) - ord("a")] += 1
for i in range(26):
if record[i] == 0:
continue
if record[i] % 2 == 1:
n -= record[i] - 1
else:
n -= record[i] - 2
return n
作者: Meaverzt (Meaverzt)   2025-01-13 19:17:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com