前言
在知乎上有人推薦了《Cracking the Coding Interview》這本書,打算找時間學習學習,會做一些總結筆記之類的東西就順手放到博客上,話說vsc換圖標了……賊醜讓人怎麼好好打代碼了qaq
人總是需要找各種各樣慰藉的理由,有時候努力是一種慰藉,習慣了做某事,一直做某事就會很安心,習慣去努力可能也會有同樣的效果吧?
題目
Arrays and Strings
檢查一個僅有a-z的字符串是否有重複字符
解題思路
比較老的套路就是O(n^2)遍歷檢查一下有沒有重複字符或者排序O(nlogn)
還有一種只需要藉助一個int變量的方法,放上CCI的代碼:
public static boolean isUniqueChars(String str) {
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;
}
利用int變量checker的位數來確定是否之前已經有過相同字符,遇到某個字符,則判斷checker的第 val 位數字是否爲1,爲1說明之前已經出現過相同字符,否則令checker的第 val 位數字爲1,做個標記。