Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Valid Anagrams - https://leetcode.com/problems/valid-anagram/sou
- class Solution {
- // Sort the underlying character arrays & compare
- // For anagrams they should be an exact match
- // Time Complexity: O(nlogn)
- // Space Complexity: O(n)
- // public boolean isAnagram(String s, String t) {
- // if(s == null && t == null) {
- // return true;
- // }
- // if(s == null || t == null) {
- // return false;
- // }
- // if(s.length() != t.length()) {
- // return false;
- // }
- // char[] sChars = s.toCharArray();
- // char[] tChars = t.toCharArray();
- // Arrays.sort(sChars);
- // Arrays.sort(tChars);
- // for(int i = 0; i < s.length(); i++) {
- // if(sChars[i] != tChars[i]) {
- // return false;
- // }
- // }
- // return true;
- // }
- // Using HashMap to count characters in one of the strings
- // and using the other string to decrement counts in Hashmap
- // Time Complexity: O(n)
- // Space Complexity: O(k)
- // where k is number of unique characters in the string
- // LeetCode indicate above solution to be much better despite the complexity
- // public boolean isAnagram(String s, String t) {
- // if(s == null && t == null) {
- // return true;
- // }
- // if(s == null || t == null) {
- // return false;
- // }
- // if(s.length() != t.length()) {
- // return false;
- // }
- // Map<Character, Integer> count = new HashMap<>();
- // for (int i = 0; i < s.length(); i++) {
- // count.put(s.charAt(i), count.getOrDefault(s.charAt(i), 0) + 1);
- // }
- // for (int i = 0; i < t.length(); i++) {
- // char c = t.charAt(i);
- // if(!count.containsKey(c)) {
- // return false;
- // }
- // int counter = count.get(c) - 1;
- // if (counter < 0) {
- // return false;
- // }
- // count.put(c, counter);
- // }
- // for(Integer countValue: count.values()) {
- // if (countValue != 0) {
- // return false;
- // }
- // }
- // return true;
- // }
- // Using Array to count characters
- // Time Complexity: O(n)
- // Space Complexity: O(1)
- // LeetCode indicate sorting solution to be much better despite the complexity
- public boolean isAnagram(String s, String t) {
- if(s == null && t == null) {
- return true;
- }
- if(s == null || t == null) {
- return false;
- }
- if(s.length() != t.length()) {
- return false;
- }
- int[] freq = new int[26];
- for (int i = 0; i < s.length(); i++) {
- freq[s.charAt(i) - 'a']++;
- freq[t.charAt(i) - 'a']--;
- }
- for(int i = 0; i < freq.length; i++) {
- if(freq[i] != 0) {
- return false;
- }
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment