[英]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']
是true
, char_set['o']
、 char_set['c']
和char_set['k']
。
char_set
的元素是boolean
s。 當您創建數組時,它們都被初始化為該類型的默認值 ( false
)。 其中一些元素的值可以在
if (char_set[val]) //...
(產生類型的兩個可能值中的一個boolean
,無論哪個是最近設置的),並可以被設置為true
在
char_set[val] = true;
在每種情況下, val
是所涉及元素的索引,而不是要設置或讀取的值。
但是請注意,這段代碼至少有兩個重大問題:
String.charAt()
返回char
類型的值,其數值范圍可達65535
。 因此,提供的代碼可以輕松生成ArrayIndexOutOfBoundsException
。
String
從0
開始索引,因此字符串中的第一個字符不包括在分析中。 從一般意義上講,這可能是有意為之,但在“分析此代碼”的意義上,認識到這一點很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.