leetcode刷题69.分割平衡字符串——Java版

Posted 一条coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题69.分割平衡字符串——Java版相关的知识,希望对你有一定的参考价值。

⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐

"括号匹配"问题,主要是栈操作,'R’进栈,'L’出栈,栈空则匹配成功,结果加一

——leetcode此题热评

前言

哈喽,大家好,我是一条。

糊涂算法,难得糊涂

点击跳转到《糊涂算法》专栏学习java大厂面试必备数据结构和算法知识!

Question

1221. 分割平衡字符串

难度:简单

在一个 平衡字符串 中,‘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".

提示:

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

Solution

标签写的是贪心,我想的是用,官方解答也没能很多的体会贪心。

  • 关键是遍历时维护一个变量计算L和R数量的差值
  • 有些指针的思想在里面

Code

所有leetcode代码已同步至github

欢迎star

/**
 * @author 一条coding
 */
class Solution {
    public int balancedStringSplit(String s) {
        int ans = 0, d = 0;
        for (int i = 0; i < s.length(); ++i) {
            char ch = s.charAt(i);
            if (ch == 'L') {
                ++d;
            } else {
                --d;
            }
            if (d == 0) {
                ++ans;
            }
        }
        return ans;
    }
}

Result

复杂度分析

  • 时间复杂度:O(N)

🌈寻宝

⭐今天是坚持刷题更文的第69/100天

⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

⭐更多数据结构和算法讲解欢迎关注专栏《糊涂算法》

为了回馈各位粉丝,礼尚往来,给大家准备了一些学习资料

需要的小伙伴可以点「下方卡片」👇👇👇关注后回复「算法」领取

以上是关于leetcode刷题69.分割平衡字符串——Java版的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—1221. 分割平衡字符串( 双指针或贪心)—day31

Leetcode刷题100天—1221. 分割平衡字符串( 双指针或贪心)—day31

LeetCode刷题第一周

leetcode1221. 分割平衡字符串

《LeetCode之每日一题》:142.分割平衡字符串

leetcode 1221. 分割平衡字符串