题目要求
题目链接
链子是循环的,随便选一点断开不合适,所以把它作为一个线性的字符串其实不好。
处理方法是将字符串扩增一倍,即necklace += necklace;
这样的话,我们从初始出发,必然能遍历整个链子且不受出发点的影响。
我的思路类似于非递归的斐波那契数列,设置一个prev一个temp,比较result和prev+temp的大小,取最大值。
遍历的时候细节有很多:
- 先初始化prev,要小心w作为开头,因为w相当于邻近的r或b
- 每一轮都考虑当前r或b,尽可能多地取,包含w也取下来,统计temp
- r e s u l t = m a x ( r e s u l t , t e m p + p r e v ) result = max(result, temp+prev) result=max(result,temp+prev)
- 更新prev,不能更新为temp,而还要考虑到本轮初始的i前面的w,所以要加上
于是乎,我WA了三个数据点,如下:
测试用例2输入:
3
rrr
测试用例2输出:
3
测试用例4输入:
17
wwwwwwwwwwwwwwwww
测试用例4输出:
17
测试用例6输入:
8
rrwwwwbb
测试用例6输出:
8
分别是三处细节问题,本质是一样的,即我没有考虑到一遍就跑完的情况,重复导致额外多加了很多。
处理方法是补充原则性判断 i < n i < n i> n >> necklace; // 复制一份 necklace += necklace; char prev_c, temp_c; // 合并最初的w while ((necklace[i] == 'w') && i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?