它是一个从字符串中删除重复字符的程序...
我只是不明白它所指的flag[str[cur]]
......
class Cc1_3 {
static String removeDup(String target) {
if (target == null) return null;
if (target.length() <= 1) return target;
char[] str = target.toCharArray();
boolean[] flag = new boolean[256];
int tail = 0;
int cur = 0;
while (cur < str.length) {
if (flag[str[cur]] == false) {
flag[str[cur]] = true;
str[tail] = str[cur];
tail++;
cur++;
} else cur++;
}
return new String(str, 0, tail);
}
public static void main(String[] args) {
String test = "aabcdeaefgf";
System.out.println(removeDup(test));
}
}
答案 0 :(得分:0)
所以你有2个数组。一个数组包含所有字符和一个包含布尔值的数组。
在java中,字符是16位。整数是32位。因此,您可以在Java中为char分配char而不会出现任何问题。您可以找到有关此here的更多信息。
所以会发生什么:
1)首先,他遍历输入String中的所有字符。 2)接下来,他检查布尔数组中的char号(对于相同的字符总是相同的)是false。意思是它还没有通过。
因此,如果找到char,则布尔数组的特定索引将设置为true,并且下次再次传递char时,if将失败。
答案 1 :(得分:0)
将字符串定位到char数组str [],因此(str [cur])可以作为布尔数组中的初始为false的整数索引。 所以当布尔数组中的索引&#34; value == false&#34;不是重复的字符。
答案 2 :(得分:0)
我相信布尔标志数组中的所有索引最初都设置为false。当程序遇到flag [str [cur]]时,它将获得str数组中的字符,如果之前已找到该字符,则flag [str [cur]]将评估为true并将被跳过,即str = [&#39 ; a&#39;&#39;&#39;&#39; a&#39;&#39; d&#39;]和flag = [false,false,false,false]。当运行flag [str [cur]]时,在索引0处它是假的,因为之前没有遇到过&#39;(相当于flag [&#39; a&#39;])。在此索引0或标志[&#39; a&#39;]变为真之后。对于&#39; b&#39;同样的事情发生了。当&#39; a&#39;再次到达它再次检查标志[&#39; a&#39;]。因为这已经是真的,所以它被跳过并且cur递增。希望这有帮助。