Java 为什么';这种算法在跟踪时有意义吗?
我已经追踪这段代码很长时间了 我明白。但在某种程度上,它停止了对我的意义 在Java 为什么';这种算法在跟踪时有意义吗?,java,algorithm,debugging,Java,Algorithm,Debugging,我已经追踪这段代码很长时间了 我明白。但在某种程度上,它停止了对我的意义 在name和type中,位置0是同一个字母,因此增加j和i(j++和i++)。i=1,j=1 在位置1中,它们不相同,因此只有增量j。i=1,j=2 在位置2中,它们不相同,因此只有增量j。i=1,j=3。 这就是我被困的地方 为什么在控制台中它也在增加i(i=2,j=3)呢?字母是不同的,这意味着只有增量j。有人能指出我没看到的吗 这就是我正在做的Leetcode问题 这是我的密码: class Solution {
name
和type
中,位置0是同一个字母,因此增加j和i(j++
和i++
)。i=1,j=1
在位置1中,它们不相同,因此只有增量j。i=1,j=2
在位置2中,它们不相同,因此只有增量j。i=1,j=3。
这就是我被困的地方
为什么在控制台中它也在增加i
(i=2,j=3
)呢?字母是不同的,这意味着只有增量j
。有人能指出我没看到的吗
这就是我正在做的Leetcode问题
这是我的密码:
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;
}
}
你自己也说过,
i
没有递增。因此,我们仍将关注name
的第一个索引:
if(name.charAt(i) == typed.charAt(j))
因此,在第三次迭代中,我们比较了第一个索引(l
)中的name
和第二个索引(l
)中的type
),它们是相同的,因此我们增加了i
和j
或者想象一下:
alex //i == 0
^
aaleex //j == 0
^
两者都相同,因此都会递增:
alex //i == 1
^
aaleex //j == 1
^
alex //i == 1
^
aaleex //j == 2
^
它们不是,因此只有第二个是递增的:
alex //i == 1
^
aaleex //j == 1
^
alex //i == 1
^
aaleex //j == 2
^
现在它们指向同一个字母,所以两者都再次递增
alex //i == 2
^
aaleex //j == 3
^
两者都是相同的,都是递增的
alex //i == 3
^
aaleex //j == 4
^
alex //i == 3
^
aaleex //j == 5
^
不一样,只增加了j
alex //i == 3
^
aaleex //j == 4
^
alex //i == 3
^
aaleex //j == 5
^
两者都一样,但是我们已经到了字符串的末尾,让我们做一个简单的试运行,您就会知道问题是什么
if(name.charAt(i) == typed.charAt(j))
当我1岁时,那么charAt(i)=>“l”
所以当j为2时,字符(j)=>l,所以两者都会增加
然后两者都将增加1。所以我会变成2,j会变成3
a l e x
0 1 2 3
a a l e e x
0 1 2 3 4 5
i 0 = j 0
i 1 = j 2
i 2 = j 3
i 3 = j 5
跟踪这些内容的最佳方法是使用调试器。调试器会向您显示
name.charAt(i)
与typed.charAt(j)
是一样的。总是一些小事情让我最难堪,谢谢您。我现在明白了:D.拥抱。