持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
写在前面
今天的这道题,《判断路径是否相交》,主要是考察在一个坐标系中的坐标不能重复的问题。
虽然涉及字符串相关结构,但是又不全是关于字符串的题目。
下面就一起来看一下吧。
题目解读
根据题目的描述来看,首先是有一个字符串,在这个字符串中有着代表着东南西北(也可以理解为上下左右)四个方位。
路径是否相交的象征,就是已经走过的坐标重新再走。
这个时候就要把相关的坐标就要保存下来。
要想保存相关的坐标,是可以通过Set集合存储相关坐标即可。
下面我们就来看看代码中怎么处理的这个情况吧。
代码实现
本次代码如下所示:
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.isPathCrossing("NES"));
}
public boolean isPathCrossing(String path) {
Set<String> vis = new HashSet<>();
int x = 0, y = 0;
vis.add(x + "," + y);
for (int i = 0; i < path.length(); i++) {
char c = path.charAt(i);
switch (c) {
case 'N':
x--;
break;
case 'S':
x++;
break;
case 'W':
y--;
break;
case 'E':
y++;
break;
}
if (!vis.add(x + "," + y)) {
return true;
}
}
return false;
}
}
代码执行结果
这次的代码执行结果就不是很好了,应该是拼接字符串的缘故导致的,大家可以试一下其他方法。
其他思路
这里拼接字符串,可以使用hash值的方式来存储一个整型数字,有的大佬就是这样处理的,具体实现还请大家自行试一下。
总结
本道题,主要考察对字符串的特征代表概念的转换,其实不是专门去考察字符串的使用的,有点概念转换的意思在里面,不过只要在存储的时候能保证坐标的唯一性也就可以了,大家解出来了吗?