写在前面
今天的这道题,《判断路径是否相交》,主要是考察在一个坐标系中的坐标不能重复的问题。
虽然涉及字符串相关结构,但是又不全是关于字符串的题目。
下面就一起来看一下吧。
题目解读
根据题目的描述来看,首先是有一个字符串,在这个字符串中有着代表着东南西北(也可以理解为上下左右)四个方位。
路径是否相交的象征,就是已经走过的坐标重新再走。
这个时候就要把相关的坐标就要保存下来。
要想保存相关的坐标,是可以通过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值的方式来存储一个整型数字,有的大佬就是这样处理的,具体实现还请大家自行试一下。
总结
本道题,主要考察对字符串的特征代表概念的转换,其实不是专门去考察字符串的使用的,有点概念转换的意思在里面,不过只要在存储的时候能保证坐标的唯一性也就可以了,大家解出来了吗?