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

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

写在前面


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

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

下面就一起来看一下吧。

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值的方式来存储一个整型数字,有的大佬就是这样处理的,具体实现还请大家自行试一下。


总结


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


相关文章
|
30天前
|
算法
算法修炼-动态规划之路径问题(1)
算法修炼-动态规划之路径问题(1)
|
1月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
2月前
|
传感器 算法 自动驾驶
混合A*运动规划算法:路径规划和路径跟踪-MPC-LQR-PID算法
混合A*运动规划算法:路径规划和路径跟踪-MPC-LQR-PID算法
79 0
混合A*运动规划算法:路径规划和路径跟踪-MPC-LQR-PID算法
|
2月前
|
算法 测试技术 C++
【动态规划】【图论】【C++算法】1575统计所有可行路径
【动态规划】【图论】【C++算法】1575统计所有可行路径
|
2月前
|
算法
【算法优选】 动态规划之路径问题——贰
【算法优选】 动态规划之路径问题——贰
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
19 0
火山中文编程 -- MD5算法和SHA算法
|
3月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
28天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
30天前
|
算法 机器人
算法沉淀 —— 动态规划篇(路径问题)
算法沉淀 —— 动态规划篇(路径问题)
27 0