返回
力扣刷题 1221 分割平衡字符串:变换字符串增强韧性策略
前端
2023-11-22 10:56:53
力扣刷题 1221 分割平衡字符串
题目
给你一个由若干字符 L
和 R
构成的字符串 s
,每个 L
要与之后的一个 R
配对。
如果存在这样的 i
,使得 s[i] = 'L'
,且 j < i
, s[j] = 'R'
,则认为这个 L
与 R
配对。
返回 s
中剩下的 L
与 R
不配对的数目。
示例 1:
输入:s = "LRLRLLRLRL"
输出:4
解释:s 中有 4 个 `L` 与 `R` 不配对,分别是第一个,第二个,第五个,和最后一个 L。
示例 2:
输入:s = "RLRLLRLRLR"
输出:2
解释:s 中有 2 个 `L` 与 `R` 不配对,分别是第一个,和最后一个 L。
示例 3:
输入:s = "LLRLLRLLRL"
输出:3
解释:s 中有 3 个 `L` 与 `R` 不配对,分别是第一个,第四个,和最后一个 L。
示例 4:
输入:s = "LRLRL"
输出:0
解释:s 中所有 `L` 与 `R` 都配对。
示例 5:
输入:s = "RLLLRLLRLL"
输出:2
解释:s 中有 2 个 `L` 与 `R` 不配对,分别是第一个,和最后一个 L。
解题思路
我们来思考一下,我们该如何解决这个问题。
首先,我们可以观察到,字符串 s
中 L
的个数和 R
的个数是相等的。所以,我们可以先计算字符串 s
中 L
的个数。
然后,我们可以遍历字符串 s
,每次遇到一个 L
,我们就将 L
的个数减一。
当我们遍历完整个字符串 s
后,我们可以得到字符串 s
中剩余 L
的个数。这个数目就是字符串 s
中剩余 L
与 R
不配对的数目。
代码实现
def balancedStringSplit(s):
"""
:type s: str
:rtype: int
"""
# 计算字符串 s 中 L 的个数
count_l = 0
for char in s:
if char == 'L':
count_l += 1
# 遍历字符串 s,计算剩余 L 的个数
count = 0
count_l_remaining = count_l
for char in s:
if char == 'L':
count_l_remaining -= 1
else:
count_l_remaining += 1
if count_l_remaining == 0:
count += 1
return count
复杂度分析
- 时间复杂度:
O(n)
,其中n
是字符串s
的长度。 - 空间复杂度:
O(1)
。
总结
分割平衡字符串的算法题,通过对字符串的字符遍历操作和简单的数学运算,即可得到字符串中剩余不配对的 L
与 R
的数目。