看板 java 關於我們 聯絡資訊
現在在看Cracking The Coding Interview 裡面一段java看不太懂 1<<val 是不是指 val所有位元向左邊移一個位子,然後最右邊的放入0 為什麼要用(1<<val)>0 來當做檢驗字母有沒有重複的其中一項因素呢? 還有我也看不太懂 checker |=(1<<val); 這個程式是用來判斷string裡的char是不是都不相同 public boolean isUniqueChars(String str){ if (str.length()> 256) return false; int checker = 0; for (int i=0; i<str.length(); i++){ int val=str.charAt(i) - 'a'; if((checker & (1<<val))>0{ return false; } checker |= (1<<val); } return true; 謝謝 -- 恬靜,閑適安靜,很美好的寧靜 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 135.0.163.188 ※ 編輯: yule1224 來自: 135.0.163.188 (03/06 04:44) ※ 編輯: yule1224 來自: 135.0.163.188 (03/06 04:45)
bitlife:1<<val是1左移val個bit,程式原理是用bit mask記錄已出現字 03/06 07:41
bitlife:元,a記在第0bit,b第1bit依此類推,某bit為1代表字元已出現 03/06 07:44
asilzheng:應該去查 bitwise operation 03/06 09:20
realmeat:這程式碼漏個左括號不能跑 03/06 10:08
missShark:bitops.html 03/07 01:21
謝謝 另外 我先前有寫錯,是要判斷不同的char 不是字母 ※ 編輯: yule1224 來自: 135.0.163.188 (03/07 01:26)
tkcn:我找了書來看,這一題規定只有 a-z,也沒有開頭 >256 那行 03/07 01:49
tkcn:若規定只會有 a-z,改成判斷 >26 會比較合理 03/07 01:51
danny8376:>256是限制字串長度 跟判斷範圍無關啊 樓上... 03/07 11:46
tkcn:前提滿足只有 a-z 的情況下,檢查是否 >26 是一種快速判斷 03/07 11:51
realmeat:java在位元運算超過範圍的實作, 建議大家try一下 03/07 13:54