2014-05-23 134 views
-4

它是一個程序,從一個字符串... 刪除重複的字符我只是不明白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中給int賦一個char而不會有任何問題。您可以找到有關此here的更多信息。

那麼什麼情況是:

1)首先,他遍歷輸入字符串的所有字符。 2)接下來,他檢查布爾數組是否(如果字符數字對於相同的字符總是相同的)是錯誤的。這意味着它還沒有經過。

所以如果發現char,布爾數組的特定索引將被設置爲true,並且if將在下一次再次通過char時失敗。

0

將字符串轉換爲char數組str [],因此(str [cur])可能是布爾數組中的整數索引,它們的初始值爲false。 所以當布爾數組「value == false」中的索引不是重複字符時。

0

我相信布爾值標誌數組中的所有索引最初都設置爲false。當程序遇到標誌[str [cur]]時,它將得到str數組中的字符,並且如果之前已經找到了字符flag [str [cur]]將計算爲true並且將被跳過,即str = ['a' ,'b','a','d']和標誌= [false,false,false,false]。當標誌[str [cur]]運行時,在索引0處它是錯誤的,因爲之前沒有遇到'a'(相當於標誌['a'])。在這個索引0或標誌['a']變爲真之後。對於'b'同樣的事情發生。當再次到達'a'時,它再次檢查標誌['a']。由於這已經是真的,所以它被跳過並且cur增加。希望這有助於。

相關問題