[LintCode] Two Strings Are Anagrams
Write a method anagram(s,t)
to decide if two strings are anagrams or not.
Clarification
What is Anagram?
- Two strings are anagram if they can be the same after change the order of characters.
Example
Given s = "abcd"
, t = "dcab"
, return true
.
Given s = "ab"
, t = "ab"
, return true
.
Given s = "ab"
, t = "ac"
, return false
.
Challenge
O(n) time, O(1) extra space
Solution:
This problem is very simple with hash maps. Store all characters and their frequencies from s, then check if t has exactly the same character set with
the same frequencies for each character.
1 public class Solution { 2 public boolean anagram(String s, String t) { 3 if(s == null || t == null || s.length() != s.length()){ 4 return false; 5 } 6 int[] chars = new int[256]; 7 for(int i = 0; i < s.length(); i++){ 8 chars[s.charAt(i)]++; 9 } 10 for(int i = 0; i < t.length(); i++){ 11 if(chars[t.charAt(i)] == 0){ 12 return false; 13 } 14 else{ 15 chars[t.charAt(i)]--; 16 } 17 } 18 return true; 19 } 20 }