为什么在跟踪时此算法没有意义?

时间:2019-02-06 15:29:23

标签: java algorithm debugging

我一直在跟踪这段代码

我了解。但是到了某个时候,它对我来说不再有意义。

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

在位置1,它们不相同,因此仅递增j。 i = 1,j = 2。

在位置2,它们不相同,因此仅递增j。 i = 1,j = 3。 这就是我被困住的地方。

在控制台中它怎么也同时增加ii = 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

2 个答案:

答案 0 :(得分:1)

您自己说过,i没有增加。因此,我们仍将查看name first 索引:

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

因此,在第三次迭代中,我们将比较第一个索引(name上的l和第二个索引(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

的结尾

答案 1 :(得分:0)

让我们进行简单的空运行,您就会知道问题出在哪里。

c <- matrix(data = NA, nrow = length(unique(df_2$symbol)), ncol = length(unique(df_1$Sample_name)))
  colnames(c) <- unique(df_1$Sample_name)
  rownames(c) <- unique(df_2$symbol)

当i为1时,charAt(i)=>'l' 因此,当j为2时,charAt(j)=>'l',因此两者都将递增。

然后两者都将增加1。所以我将变成2,而j将变成3。

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