Leetcode每日一题 —— 2833. 距离原点最远的点

力扣 LeetCode 2833. 距离原点最远的点 - 力扣(LeetCode) 2833. 距离原点最远的点 - 给你一个长度为 n 的字符串 moves ,该字符串仅由字符 'L'、'R' 和 '_' 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。 你的初始位置就在原点(0),第 ...
Leetcode每日一题 —— 2833. 距离原点最远的点
Leetcode每日一题 —— 2833. 距离原点最远的点
力扣 LeetCode

2833. 距离原点最远的点 - 力扣(LeetCode)

2833. 距离原点最远的点 - 给你一个长度为 n 的字符串 moves ,该字符串仅由字符 'L'、'R' 和 '_' 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。 你的初始位置就在原点(0),第 i 次移动过程中,你可以根据对应字符选择移动方向: * 如果 moves[i] = 'L' 或 moves[i] = '_' ,可以选择向左移动一个单位距离 * 如果 moves[i] = 'R' 或 moves[i] = '_' ,可以选择向右移动一个单位距离 移动 n...


思路

中文题目表述有点混乱,实际意思是下划线 _ 出现的地方要选择 L 或者 R,使得移动后距离原点最远。

很明显在这一维空间上移动多远只和 LR 的数量有关,谁多我们帮谁!

LR 的出现数量分别计数即可,谁多就把下划线的数量交给他。


代码

class Solution {
public:
    int furthestDistanceFromOrigin(string moves) {
        // 题目有点混乱,意思是 '_' 这个地方要选择一个移动方向,使得移动后距离原点最远
        // 很明显只和 L 和 R 的数量有关,谁多我们帮谁!  
        int numU=0,numL=0,numR=0;
        for(char c:moves){
            switch(c){
                case 'L':
                    numL++;
                    break;
                case 'R':
                    numR++;
                    break;
                case '_':
                    numU++;
            }
        }
        if(numL>=numR){
            return numL+numU-numR;
        }else{
            return numR+numU-numL;
        }
    }
};

1 个帖子 - 1 位参与者

阅读完整话题

来源: linux.do查看原文