2019-03-18-算法-进化(有效的字母异位词)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                2019-03-18-算法-进化(有效的字母异位词)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram" 輸出: true示例 2:
輸入: s = "rat", t = "car" 輸出: false說明:
 你可以假設字符串只包含小寫字母。
進階:
 如果輸入字符串包含 unicode 字符怎么辦?你能否調整你的解法來應對這種情況?
思路1:
/*** 先轉成整數數組,然后排序,然后挨個字符對比* 時間復雜度O(nlog(n))* 空間復雜度O(n)* @param s* @param t* @return*/public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}int[] a = new int[s.length()];int[] b = new int[t.length()];for(int i=0;i<s.length();i++) {a[i] = s.charAt(i);}for(int i=0;i<t.length();i++) {b[i] = t.charAt(i);}Arrays.sort(a);Arrays.sort(b);for(int i=0;i<s.length();i++) {if(a[i] != b[i]) {return false;}}return true;}思路2:對思路1進行優化,直接對字符數組進行排序
public boolean isAnagram:(String s, String t) {if(s.length() != t.length()) {return false;}char[] a = s.toCharArray();char[] b =t.toCharArray();Arrays.sort(a);Arrays.sort(b);for(int i=0;i<s.length();i++) {if(a[i] != b[i]) {return false;}}return true;}思路3:不排序,統計字母出現次數
public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}Map<Character, Integer> mapS = new HashMap<Character, Integer>();Map<Character, Integer> mapT = new HashMap<Character, Integer>();for(char c:s.toCharArray()) {mapS.put(c, mapS.get(c) == null?1:mapS.get(c) +1);}for(char c:t.toCharArray()) {mapT.put(c, mapT.get(c) == null?1:mapT.get(c) +1);}if(mapS.size() != mapT.size()) {return false;}for(char c :mapS.keySet()) {if(!mapT.containsKey(c) || mapT.get(c).intValue() != mapS.get(c).intValue()) {return false;}}return true;}思路4,使用字母表存儲(當前最優)
/*** 思路4:思路3優化版:使用字母表存儲* 時間復雜度O(nlog(n))* 空間復雜度O(n)* @param s* @param t* @return*/public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}int[] si = new int[26];int[] ti = new int[26];for(char c:s.toCharArray()) {si[c-'a']++;}for(char c:t.toCharArray()) {ti[c-'a']++;}for(int i=0;i<26;i++) {if(si[i] != ti[i]) {return false;}}return true;}5、思路5,使用類庫,縮短代碼
public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}char []a = s.toCharArray();char[]b = t.toCharArray();Arrays.sort(a);Arrays.sort(b);return String.valueOf(a).equals(String.valueOf(b));}總結
以上是生活随笔為你收集整理的2019-03-18-算法-进化(有效的字母异位词)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 衣帽架塞进后备厢?小米汽车最新专利引发热
- 下一篇: 英伟达发布人工智能芯片HGX H200
