我跟踪这段代码已经有一段时间了
我明白了。但在某些时候,它对我来说不再有意义了。
在 name
和 typed
中,位置 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
没有递增。所以我们仍然会查看 name
的 first 索引:
if(name.charAt(i) == typed.charAt(j))
所以在第三次迭代中,我们比较第一个索引 (l
) 处的 name
和第二个索引处的 typed
,(l
) 并且它们 相同,所以我们同时递增 i
和 j
或者想象一下:
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/