Dadas dos cadenas s y t, escribe una función para determinar si t es un anagrama de s.
Solución Java 1
Suponiendo que la cadena contiene solo alfabetos en minúsculas, aquí hay una solución simple.
public boolean isAnagram(String s, String t) { if(s==null || t==null) return false; if(s.length()!=t.length()) return false; int[] arr = new int[26]; for(int i=0; i<s.length(); i++){ arr[s.charAt(i)-'a']++; arr[t.charAt(i)-'a']--; } for(int i: arr){ if(i!=0) return false; } return true; } |
Solución Java 2
Si las entradas contienen caracteres Unicode, una matriz con una longitud de 26 no es suficiente.
public boolean isAnagram(String s, String t) { if(s.length()!=t.length()) return false; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); for(int i=0; i<s.length(); i++){ char c1 = s.charAt(i); if(map.containsKey(c1)){ map.put(c1, map.get(c1)+1); }else{ map.put(c1,1); } } for(int i=0; i<s.length(); i++){ char c2 = t.charAt(i); if(map.containsKey(c2)){ if(map.get(c2)==1){ map.remove(c2); }else{ map.put(c2, map.get(c2)-1); } }else{ return false; } } if(map.size()>0) return false; return true; } |