Leetcode每日一题 —— 2833. 距离原点最远的点
- 内容介绍
- 文章标签
- 相关推荐
2833. 距离原点最远的点 - 力扣(LeetCode)
2833. 距离原点最远的点 - 给你一个长度为 n 的字符串 moves ,该字符串仅由字符 'L'、'R' 和 '_' 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。 你的初始位置就在原点(0),第 i 次移动过程中,你可以根据对应字符选择移动方向: * 如果 moves[i] = 'L' 或 moves[i] = '_' ,可以选择向左移动一个单位距离 * 如果 moves[i] = 'R' 或 moves[i] = '_' ,可以选择向右移动一个单位距离 移动 n...
思路
中文题目表述有点混乱,实际意思是下划线 _ 出现的地方要选择 L 或者 R,使得移动后距离原点最远。
很明显在这一维空间上移动多远只和 L、R 的数量有关,谁多我们帮谁!
对 L 和 R 的出现数量分别计数即可,谁多就把下划线的数量交给他。
代码
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;
}
}
};
网友解答:
--【壹】--:
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
ctl = ctr = ct_ = 0
for c in moves:
if c == 'L':
ctl += 1
elif c == 'R':
ctr += 1
else:
ct_ += 1
return abs(ctr - ctl) + ct_
--【贰】--:
嘻嘻~窝也写了个Py版的~
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
l, r = sum(1 for i in moves if i == "L"), sum(1 for i in moves if i == "R")
return len(moves) - l - r + abs(l - r)
--【叁】--:
简单题。_统一安排就好。
class Solution {
public:
int furthestDistanceFromOrigin(string moves) {
auto Move = [&](char dir) -> int {
int res = 0;
for(auto it : moves) {
if(it == '_') {
it = dir;
}
if(it == 'L') {
res -= 1;
} else {
res += 1;
}
}
return abs(res);
};
return max(Move('L'),Move('R'));
}
};
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
def Move(dir: str) -> int:
res = 0
for s in moves:
if s == '_':
s = dir
if s == 'L':
res -= 1
elif s == 'R':
res += 1
return abs(res)
return max(Move('L'),Move('R'))
func furthestDistanceFromOrigin(moves string) int {
Move := func(dir byte) int {
res := 0
for i := 0; i < len(moves); i++ {
c := moves[i]
if c == '_' {
c = dir
}
if c == 'L' {
res -= 1
} else if c == 'R' {
res += 1
}
}
if res < 0 {
return -res
}
return res
}
return max(Move('L'),Move('R'))
}
2833. 距离原点最远的点 - 力扣(LeetCode)
2833. 距离原点最远的点 - 给你一个长度为 n 的字符串 moves ,该字符串仅由字符 'L'、'R' 和 '_' 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。 你的初始位置就在原点(0),第 i 次移动过程中,你可以根据对应字符选择移动方向: * 如果 moves[i] = 'L' 或 moves[i] = '_' ,可以选择向左移动一个单位距离 * 如果 moves[i] = 'R' 或 moves[i] = '_' ,可以选择向右移动一个单位距离 移动 n...
思路
中文题目表述有点混乱,实际意思是下划线 _ 出现的地方要选择 L 或者 R,使得移动后距离原点最远。
很明显在这一维空间上移动多远只和 L、R 的数量有关,谁多我们帮谁!
对 L 和 R 的出现数量分别计数即可,谁多就把下划线的数量交给他。
代码
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;
}
}
};
网友解答:
--【壹】--:
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
ctl = ctr = ct_ = 0
for c in moves:
if c == 'L':
ctl += 1
elif c == 'R':
ctr += 1
else:
ct_ += 1
return abs(ctr - ctl) + ct_
--【贰】--:
嘻嘻~窝也写了个Py版的~
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
l, r = sum(1 for i in moves if i == "L"), sum(1 for i in moves if i == "R")
return len(moves) - l - r + abs(l - r)
--【叁】--:
简单题。_统一安排就好。
class Solution {
public:
int furthestDistanceFromOrigin(string moves) {
auto Move = [&](char dir) -> int {
int res = 0;
for(auto it : moves) {
if(it == '_') {
it = dir;
}
if(it == 'L') {
res -= 1;
} else {
res += 1;
}
}
return abs(res);
};
return max(Move('L'),Move('R'));
}
};
class Solution:
def furthestDistanceFromOrigin(self, moves: str) -> int:
def Move(dir: str) -> int:
res = 0
for s in moves:
if s == '_':
s = dir
if s == 'L':
res -= 1
elif s == 'R':
res += 1
return abs(res)
return max(Move('L'),Move('R'))
func furthestDistanceFromOrigin(moves string) int {
Move := func(dir byte) int {
res := 0
for i := 0; i < len(moves); i++ {
c := moves[i]
if c == '_' {
c = dir
}
if c == 'L' {
res -= 1
} else if c == 'R' {
res += 1
}
}
if res < 0 {
return -res
}
return res
}
return max(Move('L'),Move('R'))
}

