1-1 確定一個字符串的字符是否全都不相同。不用額外的數據結構該如何處理?
考慮字符集,ASCII or Unicode
HashMap,空間複雜度O(n),時間複雜度O(1);優化,bit vector
樸素的算法,兩趟遍歷O(n^2),或者,先排序再遍歷O(nlogn)
1-2 實現void reverse(char *str)
two pointers
recursion
1-3 判斷兩個string是否爲anagram(變位詞)
HashMap統計個數
先排序string再比較
1-4 將String中的空格替換爲%20,原數組上操作
先確定新string尾部的位置,然後從後往前複製,O(n)
1-5 壓縮string,eg:aabccc->a2b1c3
考慮新的字符串拼接過程string + string 時間複雜度爲O(n^2),使用stringBuffer優化,string.append(),或者構建一個數組
1-6 給定一個N*N的矩陣表示的圖像,每個像素大小爲4字節,實現一個方法,使之旋轉90度。不用額外空間怎麼做?
按層操作,時間複雜度爲O(n^2),不需要額外的空間,按索引交換4對元素
1-7 M*N的矩陣中,元素爲0所在的行&列,實現清零
建兩個數組指示需要清空的行&列,空間複雜度O(M+N)
不要額外空間的做法,先找到一個0,然後把這個0所在的行&列,看做輔助數組
1-8 判斷s1是否是s2旋轉而成的,只能調用一次isSubstring(檢測字串函數)
s1 = xy,s2 = yx,s1s1 = xyxy
isSubstring(s1s1,s2)
巧妙!!!