CCI(1)-- Arrays and Strings

前言

在知乎上有人推薦了《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,做個標記。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章