2020年6月8日 等式方程的可满足性 equationsPossible
默认格式;
class Solution {
public boolean equationsPossible(String[] equations) {
}
}
解题思路:
这道题,感觉就是题目比较难理解,题目的意思是,在这个数组中不存在矛盾的等式关系,比如a==b,b==c,但是c!=a,这就存在一个矛盾,这种情况输出false。
这题的关键点在于!=,只有!=才会产生矛盾,所以我的想法是,使用图,把数组转变为一张关系图,所有相等的都连接起来
然后我们判断c!=d如何判断是否正确,直接在c所在的关系中广度优先算法搜索是否存在d,如果不存在,则表示确实是不相等的,但是如果存在,则表示存在矛盾,输出false。
昨天刚刚学了图和广度优先搜索算法,今天就找到了练习的机会,绝对不能放过。
第一步,根据字符串数组构建图
虽然可以在构建图的同时就判断是否存在矛盾,但是我觉得暂时还是先完成图之后判断,循序渐进。
一遍写出没有bug的代码,虽然有点慢,但是可以优化
public boolean equationsPossible(String[] equations) {
HashMap<Character, HashSet<Character>> map=new HashMap<>();
//构建图
for(int i=0;i<equations.length;i++){
//判断是不是等式,如果是等式,构造图连接
if ((equations[i].charAt(1))=='='){
//如果是还不存在,就新插入一个,如果已经存在,就添加一个节点
if (map.