簡體   English   中英

破解編碼面試:獨特的字符(if塊的工作)

[英]Cracking the coding Interview: Unique Character (Working of if block)

我想從下面的代碼中了解 if 塊的工作原理。 例如:如果我的字符串是搖滾,那么 ASCII 將是char_set[r] = 114 char_set[o] = 111 , char_set[c] = 99 , char_set[k] = 107 那么第一次當char_set[r] = 114會來if block 那么要檢查什么? 由於char_set是布爾類型,所以它可能是真或假,但根據我的理解,最初char_set[r] = 114沒有設置為真或假。 那么我們如何在 if 塊中檢查它是真還是假。 我查看了之前的相關問題,但我的問題不同,找不到任何內容。 這個問題取自《破解編碼面試》一書。

public boolean isuniqueChars2(String str) {

       if (str.length() > 128) 
        return false;

    boolean[] char_set = new boolean[256];
    for (int i = 1; i < str.length(); i++)
    {
        int val = str.charAt(i);
        if (char_set[val]) {
            return false;
      }
        char_set[val] = true;
    }
    return true;
}

數組在創建時使用默認值進行初始化。 boolean類型的默認值為false

char_set作用是針對每個 ASCII 值,它存儲一個boolean值,表示您之前是否見過該字符。

所以本質上,它是這樣說的(有點偽代碼):

for (every character in the string) {
    int val = str.charAt(i); //get the current character;
    if (char_set[val]) // if (we've seen the current character already)
        return false; // not made of unique characters
    char_set[val] = true; //store that we've seen the current character;
}
return true; // we got through all the characters, so it must now be unique.

真正發生的情況是,如果您的輸入字符串是rock ,則char_set['r']truechar_set['o']char_set['c']char_set['k']

char_set的元素是boolean s。 當您創建數組時,它們都被初始化為該類型的默認值 ( false )。 其中一些元素的值可以在

        if (char_set[val]) //...

(產生類型的兩個可能值中的一個boolean ,無論哪個是最近設置的),並可以被設置為true

        char_set[val] = true;

在每種情況下, val是所涉及元素的索引,而不是要設置或讀取的值。

但是請注意,這段代碼至少有兩個重大問題:

  1. String.charAt()返回char類型的值,其數值范圍可達65535 因此,提供的代碼可以輕松生成ArrayIndexOutOfBoundsException

  2. String0開始索引,因此字符串中的第一個字符不包括在分析中。 從一般意義上講,這可能是有意為之,但在“分析此代碼”的意義上,認識到這一點很重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM