java - 为什么这个算法在追踪时没有意义?

标签 java algorithm debugging

我跟踪这段代码已经有一段时间了

我明白了。但在某些时候,它对我来说不再有意义了。

nametyped 中,位置 0 是同一个字母,因此 j 和 i 都递增(j++i++)。 i = 1, j = 1。

在位置 1,它们不相同,所以只增加 j。 i = 1, j = 2。

在位置 2 中,它们不相同,所以只增加 j。我 = 1,j = 3。 这就是我被困的地方。

为什么在控制台中它也递增 i (i = 2, j = 3)?字母不同,表示仅递增 j。有人可以指出我没有看到什么吗?

这是我正在做的 Leetcode 题 https://leetcode.com/problems/long-pressed-name/

这是我的代码:

class Solution {
    public String name = "alex";
    public String typed = "aaleex";
    public boolean isLongPressedName(String name, String typed) {
        if(name == null) return false;
        if(typed == null) return false;

        int i = 0;
        int j = 0;

        for(;i < name.length() && j < typed.length();) {
            if(name.charAt(i) == typed.charAt(j)) {
                j++;
                i++;
                System.out.println("END IF");
            } else {
                j++;
                System.out.println("END ELSE");
            }
            System.out.println("i => " + i);
            System.out.println("j => " + j);


            if(i != name.length() && j == typed.length()) {
                return false;
            }

        }
        return true;
    }
}

控制台输出:

END IF
i => 1
j => 1
END ELSE
i => 1
j => 2
END IF
i => 2
j => 3
END IF
i => 3
j => 4
END ELSE
i => 3
j => 5
END IF
i => 4
j => 6

最佳答案

你自己说了,i没有递增。所以我们仍然会查看 namefirst 索引:

 if(name.charAt(i) == typed.charAt(j))

所以在第三次迭代中,我们比较第一个索引 (l) 处的 name 和第二个索引处的 typed,(l) 并且它们 相同,所以我们同时递增 ij

或者想象一下:

alex    //i == 0
^
aaleex  //j == 0
^

两者相同,所以都递增:

alex    //i == 1
 ^
aaleex  //j == 1
 ^

它们不是,所以只有秒增加:

alex    //i == 1
 ^
aaleex  //j == 2
  ^

现在它们指向同一个字母,所以它们都再次递增

alex    //i == 2
  ^
aaleex  //j == 3
   ^

两者相同,均递增

alex    //i == 3
   ^
aaleex  //j == 4
    ^

不一样,只有j递增

alex    //i == 3
   ^
aaleex  //j == 5
     ^

两者相同,但我们已到达 String

的末尾

关于java - 为什么这个算法在追踪时没有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557125/

相关文章:

debugging - 如何从中间Web API服务捕获HTTP流量?

java - 从 S3 解压缩并读取 gz 文件 - Scala

java - 更改 Intent 时应用程序崩溃

java - 为什么 ThreadPoolExecutor 中的 maxPoolSize 什么都不做?

java - 获取适合矩形的所有正方形的大小?‽?

c# - 恢复 "parent - child"关系树的最有效方法是什么?

algorithm - 用于在类别的二维网格中搜索坐标的最佳数据结构

c++ - 为什么编译器告诉我在 'if'和 'else if'语句中没有运算符与操作数类型匹配?

java - AWS 超时时来自 HTable 的 MapReduce 输入

objective-c - 调试间歇性卡住的 NSOperationQueue