这里写目录标题
- 一、387. 字符串中的第一个唯一字符
- 二、1189. “气球” 的最大数量
- 三、1221. 分割平衡字符串
一、387. 字符串中的第一个唯一字符
简单
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = “leetcode”
输出: 0
示例 2:
输入: s = “loveleetcode”
输出: 2
示例 3:
输入: s = “aabb”
输出: -1
def test(s):top=[]dic={}for i in s:if i not in dic:dic[i]=1top.append(i)else:dic[i]+=1if i in top:top.remove(i)if len(top)==0:return -1else:return s.index(top[0])s="leetcode"
print(test(s))
二、1189. “气球” 的最大数量
提示
简单
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。
字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。
def fn1(text, balloon):cnt = Counter(text)target = Counter(balloon)return min(cnt[k] // target[k] for k in target)text = "nlaebolko"
balloon = "balloon"
print(fn1(text, balloon))
三、1221. 分割平衡字符串
提示
简单
平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。
给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足:
每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。
示例 1:
输入:s = “RLRRLLRLRL”
输出:4
解释:s 可以分割为 “RL”、“RRLL”、“RL”、“RL” ,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。
示例 2:
输入:s = “RLRRRLLRLL”
输出:2
解释:s 可以分割为 “RL”、“RRRLLRLL”,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。
注意,s 无法分割为 “RL”、“RR”、“RL”、“LR”、“LL” 因为第 2 个和第 5 个子字符串不是平衡字符串。
示例 3:
输入:s = “LLLLRRRR”
输出:1
解释:s 只能保持原样 “LLLLRRRR” 。
无脑走栈的操作,思路:
循环字符串s
当栈为空或者栈顶元素等于当前元素时,入栈
否则出栈
每次循环结束如果栈内为空表示找到了一个符合条件,结果+1
最终返回结果ret即可
def Solution(s):ret=0stack=[]for i in s:if not stack or stack[-1]==i:stack.append(i)else:stack.pop()if not stack:ret+=1return rets = "RLRRRLLRLL"
print(Solution(s))