【Java,面試】實現一個演算法,確定一個字串的所有字元是否全都不同
阿新 • • 發佈:2019-01-10
//method to figure out if there's no duplicate char in a ASCII string import java.lang.String boolean isUniquedChars(String myString) { if(myString.length() > 256) return false; boolean[] char_set = new boolean[256]; for (int i = 0; i < myString.length(); i++) { int val = myString.charAt(i); if (char_set[val]) { return false; } char_set[val] = true; } return true; } //method 2 boolean isUniquedChars_method2(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; }
實現一個演算法,確定一個字串的所有字元是否全都不同
首先 詢問字串是ASCII 還是Unicode,二者不同只在於unicode需要更大的儲存空間。
以上兩個辦法中,第一個辦法的時間複雜度為O(n), 空間複雜度為O(1)
第二個辦法通過位運算把空間幅度減小為了原來的1/8(程式碼假定字串只含有小寫的a到z),時間複雜度不變。
還有其他解法:
將字串中的每個字元與其他字元比較,時間複雜度O(n2),空間複雜度O(1)
對字串進行時間複雜度為O(nlog(n))的排序,線性檢查有沒有相鄰字元完全相同的情況