LeetCode 1221. 分割平衡字符串

37 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天,点击查看活动详情

1.描述

1221. 分割平衡字符串 - 力扣(LeetCode) (leetcode-cn.com)

在一个 平衡字符串 中,'L''R' 字符的数量是相同的。

给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。

注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。

返回可以通过分割得到的平衡字符串的 最大数量

 

示例 1:

输入:s = "RLRRLLRLRL"
输出:4
解释:s 可以分割为 "RL""RRLL""RL""RL" ,每个子字符串中都包含相同数量的 'L''R'

示例 2:

输入:s = "RLLLLRRRLR"
输出:3
解释:s 可以分割为 "RL""LLLRRR""LR" ,每个子字符串中都包含相同数量的 'L''R'

示例 3:

输入:s = "LLLLRRRR"
输出:1
解释:s 只能保持原样 "LLLLRRRR".

示例 4:

输入:s = "RLRRRLLRLL"
输出:2
解释:s 可以分割为 "RL""RRRLLRLL" ,每个子字符串中都包含相同数量的 'L''R'

提示:

  • 1 <= s.length <= 1000
  • s[i] = 'L' 或 'R'
  • s 是一个 平衡 字符串

2.分析

直接遍历一遍字符串,通过两个变量保存L和R的长度,count作为计数器

当两个长度相等时即'L'和'R'的数量相等,count加一,然后将两个变量置为0,继续下一次的长度保存

有些同学可能想着用一个临时变量存储字符的ASCCI码值然后%('F'+'R')==0就计数一次

但是会有他们之间公倍数的问题

可能会有的测试用例无法通过

3.AC代码

class Solution {
public:
	int balancedStringSplit(string s) {
		int temp1=0;
		int temp2=0;
		int count=0;
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] == 'L')
			{
				temp1++;
			}
			if (s[i] == 'R')
			{
				temp2++;
			}
			if (temp1 == temp2)
			{
				count++;
				temp1 = 0;
				temp2 = 0;
			}
		}
		return count;
	}
};

4.总结

这道题目看起来好像很复杂,其实是非常简单的贪心

参考

很简单的贪心思路 - 分割平衡字符串 - 力扣(LeetCode) (leetcode-cn.com)