所謂的兩字串互為 Anagrams ,意思就是兩個字串中,字母出現的次數都一樣,只是位置不同,比如題目說的 ate 、 eat 、 tea 它們就都互為 Anagrams 。如何判斷兩字串是否互為 Anagrams 是關鍵解題點,這題雖然歸為 Medium ,但是偏向 easy 的,需要注意的點是:
- 熟悉一些 java 內建常用的字串處理 function ,寫起來會比較簡潔。
- 想到使用 map 結構來儲存分組資料。
這題我看起來也是很技巧性的題目,一開始要把 subarray 的特性掌握的淋漓盡致,並且想到用 hashmap 來建立快速查找關係,真的有點困難…但也是這道題的魅力吧 ! 基本上 hashmap 題目大概都會偏向這種步驟應用,多注意可以讓自己視野開闊。
Java 8 因為引入了 lambda 這樣的 functional 函數,所以 Map 系列增加了一些方法,感覺還是很好用的,簡單做一些相關介紹 …
Map 是 Java 的其中一 interface,不是collection,也不會繼承 Collection interface。 JDK8 的 Map API 有不少便利的預設方法,以下可以介紹一下。
使用 HashMap 的方法 :
computeIfAbsent(K key, Function remappingFunction)
其中 remappingFunction 是一個 Functional interface
- input 為 map 的 key
- output 會成為 map 的 value
HashMap 的 computeIfAbsent 方法,在 key 不存在時,會做 remappingFunction 的操作,所以再也不會因為漏寫
if x == null
而出現空指針的 bug 了。
經常有一些業務邏輯要用 Map 來解決,如果再多懂得一些 Map 的方法,是可以寫出精簡的 code 的。這裡展示一些優雅處理
Map<K, Collection<T>>
類型的方式。