首页 > 试题广场 >

牛牛跳方块

[编程题]牛牛跳方块
  • 热度指数:160 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛在玩一个跳方块的游戏,他的面前有一片方块区域,由两种颜色的方块组成,一种是红色,一种是黑色。
他每次从起点开始,不断地蓄力跳跃,他需要跳跃到终点。
在每次跳跃中,如果牛牛跳到了黑色方块上,那么他下一步必须向前跳跃,反之,他下一步必须向后跳跃。
他每次可以跳跃的距离为[1,max],max为他单次跳跃的最大距离。
给定一个由'S','E','R','B'组成的的字符串s('R'代表红色,'B'代表黑色,'S'代表起点,'E'代表终点),返回牛牛单次跳跃时最小的最大距离是多少?我们保证字符串中,'S'出现的位置在'E'左侧。
示例1

输入

"SRBRBBRRE"

输出

3

说明

牛牛可以先从起点跳到第二个'R',然后再往回跳到'B',然后再跳到第三个'B',最后到达终点,所以牛牛单次跳跃时最小的最大距离是3。 

备注:

找出R连续的最大值就X行了,以为你需要跨过R才行,不然一直会回去,所以最小的跨度是X+1;
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定一个由'S','E','R','B'组成的的字符串s('R'代表红***'代表黑色,'S'代表起点,'E'代表终点),返回牛牛单次跳跃时最小的最大距离是多少?
     * @param s string字符串 代表题目中的s
     * @return int整型
     */
    int jumpRect(string s) {
        // write code here
        int count=0;
        int sum=0;
        for(int i=1;i<s.size()-1;i++)
        {
            if(s[i]=='R')
                count++;
            else
                count=0;
            sum=max(count,sum);
        }
        return sum+1;
    }
};
发表于 2021-02-23 22:37:02 回复(0)