1496. 判断路径是否相交

题目

给你一个字符串 path,其中 path[i] 的值可以是 'N''S''E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。

你从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。

如果路径在任何位置上与自身相交,也就是走到之前已经走过的位置,请返回 true ;否则,返回 false

示例1:

1
2
3
输入:path = "NES"
输出:false
解释:该路径没有在任何位置相交。

示例2:

1
2
3
输入:path = "NESWW"
输出:true
解释:该路径经过原点两次。

提示:

  • 1 <= path.length <= 104
  • path[i]'N''S''E''W'

解法

解法一:

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public boolean isPathCrossing(String path) {
Set<String> visited = new HashSet<>(path.length());
int x = 0;
int y = 0;
visited.add("0_0");
for (char c : path.toCharArray()) {
switch (c) {
case 'N':
y++;
break;
case 'E':
x++;
break;
case 'S':
y--;
break;
case 'W':
x--;
break;
}
String location = x + "_" + y;
if (visited.contains(location)) {
return true;
}
visited.add(location);
}
return false;
}
0%