題目出處 力扣(leetcode)
實現乙個演算法,確定乙個字串 s 的所有字元是否全都不同。
示例 1:
輸入: s = "leetcode"
輸出: false
示例 2:
輸入: s = "abc"
輸出: true
限制:0 <= len(s) <= 100
如果你不使用額外的資料結構,會很加分。
就是這麼簡單一道題,居然看到灰常多的解法。雖然題目提示盡量不用額外的資料機構,但實際開發中,內建的資料結構除了記憶體稍微多了那麼一點點,我覺得並沒什麼不妥。但作為面試題來做就按出題者的意圖來做吧。
執行效率2ms 記憶體36.4左右 一行**就搞定
public static boolean isunique(string astr)
執行效率0ms 記憶體36.4左右
public boolean isunique(string astr)
}return true;
}
執行效率0ms 記憶體36.1左右
public boolean isunique(string astr)
return hashset.size() == astr.length() ;
}
執行效率0ms 記憶體36.1左右
public boolean isunique(string astr)
}return true;
}
set去重
一、二大致相同,但第一種方法中astr.tochararray()方法自然是多用了記憶體。而去重三和二比的話在某些情況有不同之處的
執行效率0ms 記憶體36.2
## 當前字元是否在 是否包含在後續的字元中
public boolean isunique(string astr)
high64 |= bitindex;
} else
low64 |= bitindex;}}
return true;
}
這裡還看到如下一段闡述
如果我是面試官,我會希望看到什麼?
可能有點偏題,畢竟這裡主要就是做題的地方。。
如果我是面試官,會考慮主要考察什麼,就我的工作經驗看,大多數主要是招聘工程師的,面試者如果什麼問題都沒有,直接寫個二重迴圈搞定,會首先給個50分,如果能寫點判斷字串是否為null的,60分。
直接上手什麼bitset,什麼位運算的,我會先問他,題目中有沒有交代字串的字元一定是26個英文本母?如果是unicode環境,你是不是要準備2^16/8個位元組的空間?在實際專案中,風險可控,結果可期更重要,絕大多數時候不在乎那點時間和資源。
所以我期望面試者不要急於解答,我希望他先問我問題:
字串的字元範圍,如果我告訴他,26個小寫英文本母,那可能一開頭直接判斷如果字元長度》26, 直接返回false,做到這一點的,80分
如果我告訴他ascii字符集,然後他的**裡有邊界檢查,並且針對不同的範圍有不同的側重點,比如說ascii字符集,那也就是128個可能性,16個位元組的位運算比較好
如果我告訴他是unicode,沒有字元範圍,老老實實排序再判斷是比較符合我對工程師的要求的,因為演算法效能穩定,沒有額外資源要求,一眼看出沒什麼不可預見的風險,100分。
就是說,有些東西,沒想到或者一時沒想到根本不是問題,日常工作中稍微提示一下即可,但是縝密的思維對於程式設計師來說更重要。
一道看似平平無奇的面試題,解法多種多樣。很多時候我們在工作中的時候,在大多數情況下只會寫一種解決方案,甚至你也只會想一種解決方法,也不會去比較哪個更優秀。但如果真正的有這種思考的態度,或許做技術久了,差距就出來了
面試題 01 01 判定字元是否唯一
實現乙個演算法,確定乙個字串 s 的所有字元是否全都不同。此題首先可以問一下是否為ascii字元還是unicode字元。對於ascii字元來說最多就256個字元,因此,如果大於256在false。自己解 bool isunique string astr return true 金典解 bool i...
面試題 01 01 判定字元是否唯一
面試題 01.01.判定字元是否唯一 力扣 leetcode 使用雜湊表就會很簡單,時空複雜度都是o n class solution for const auto c astr return true 可以使用bitset class solution for const auto c astr ...
面試題 01 01 判定字元是否唯一
面試題 01.01.判定字元是否唯一 實現乙個演算法,確定乙個字串 s 的所有字元是否全都不同。示例 1 輸入 s leetcode 輸出 false 示例 2 輸入 s abc 輸出 true 限制 0 len s 100 如果你不使用額外的資料結構,會很加分。使用unordered set容器,...