文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据结构与算法之分割平衡字符串

2024-12-02 11:41

关注

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

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

注意:分割得到的每个字符串都必须是平衡字符串。

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

示例 1:

示例 2:

示例 3:

示例 4:

思路

这道题目看起来好像很复杂,其实是非常简单的贪心,关于贪心,我在这里关于贪心算法,你该了解这些!有详细的讲解。

从前向后遍历,只要遇到平衡子串,计数就+1,遍历一遍即可。

局部最优:从前向后遍历,只要遇到平衡子串 就统计

全局最优:统计了最多的平衡子串。

局部最优可以推出全局最优,举不出反例,那么就试试贪心。

例如,LRLR 这本身就是平衡子串 , 但要遇到LR就可以分割。

C++代码如下:

  1. class Solution { 
  2. public
  3.     int balancedStringSplit(string s) { 
  4.         int result = 0; 
  5.         int count = 0; 
  6.         for (int i = 0; i < s.size(); i++) { 
  7.             if (s[i] == 'R'count++; 
  8.             else count--; 
  9.             if (count == 0) result++; 
  10.         } 
  11.         return result; 
  12.     } 
  13. }; 

拓展

一些同学可能想,你这个推理不靠谱,都没有数学证明。怎么就能说是合理的呢,怎么就能说明 局部最优可以推出全局最优呢?

一般数学证明有如下两种方法:

如果真的去严格数学证明其实不是在我们刷题或者 面试的考察范围内了。

所以贪心题目的思考过程是:如果发现局部最优好像可以推出全局最优,那么就 尝试一下举反例,如果举不出反例,那么就试试贪心。

其他语言版本

Java

  1. class Solution { 
  2.     public int balancedStringSplit(String s) { 
  3.         int result = 0; 
  4.         int count = 0; 
  5.         for (int i = 0; i < s.length(); i++) { 
  6.             if (s.charAt(i) == 'R'count++; 
  7.             else count--; 
  8.             if (count == 0) result++; 
  9.         } 
  10.         return result; 
  11.     } 

JavaScript

  1. var balancedStringSplit = function(s) { 
  2.     let res = 0, total = 0;//res为平衡字符串数量 total为当前"R"字符和"L"字符的数量差 
  3.     for(let c of s){// 遍历字符串每个字符 
  4.         //因为开始字符数量差就是0,遍历的时候要先改变数量差,否则会影响结果数量 
  5.         total += c === 'R' ? 1:-1;//遇到"R",total++;遇到"L",total-- 
  6.         if(total === 0) res++;//只要"R""L"数量一样就可以算是一个平衡字符串 
  7.     } 
  8.     return res; 
  9. }; 

 

来源:代码随想录内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯