可以任何人解释我这个程序是如何工作的

时间:2014-05-23 16:55:49

标签: java arrays string

它是一个从字符串中删除重复字符的程序... 我只是不明白它所指的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));    
    }
}

3 个答案:

答案 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递增。希望这有帮助。