我一直在跟踪这段代码
我了解。但是到了某个时候,它对我来说不再有意义。
在name
和typed
中,位置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问题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
答案 0 :(得分:1)
您自己说过,i
没有增加。因此,我们仍将查看name
的 first 索引:
if(name.charAt(i) == typed.charAt(j))
因此,在第三次迭代中,我们将比较第一个索引(name
上的l
和第二个索引(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
答案 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))