算法编程(二十六):判断路径是否相交

95 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

写在前面

今天的这道题,《判断路径是否相交》,主要是考察在一个坐标系中的坐标不能重复的问题。

虽然涉及字符串相关结构,但是又不全是关于字符串的题目。

下面就一起来看一下吧。

image.png

题目解读

根据题目的描述来看,首先是有一个字符串,在这个字符串中有着代表着东南西北(也可以理解为上下左右)四个方位。

路径是否相交的象征,就是已经走过的坐标重新再走。

这个时候就要把相关的坐标就要保存下来。

要想保存相关的坐标,是可以通过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;
    }


}

代码执行结果

这次的代码执行结果就不是很好了,应该是拼接字符串的缘故导致的,大家可以试一下其他方法。

image.png

其他思路

这里拼接字符串,可以使用hash值的方式来存储一个整型数字,有的大佬就是这样处理的,具体实现还请大家自行试一下。

总结

本道题,主要考察对字符串的特征代表概念的转换,其实不是专门去考察字符串的使用的,有点概念转换的意思在里面,不过只要在存储的时候能保证坐标的唯一性也就可以了,大家解出来了吗?