Skip to content

Commit 42ef596

Browse files
committed
Add valid anagram solution
1 parent e77ba97 commit 42ef596

File tree

4 files changed

+134
-2
lines changed

4 files changed

+134
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package java1.algorithms.strings;
2+
3+
import java.util.HashMap;
4+
5+
public class ValidAnagram {
6+
7+
//HashMap:- TC:O(n) SC:O(n)
8+
private static boolean validAnagram1(String str1, String str2) {
9+
if(str1.length() != str2.length()) {
10+
return false;
11+
}
12+
13+
HashMap<Character, Integer> hashMap = new HashMap<>();
14+
15+
for(int i = 0; i< str1.length(); i++) {
16+
char ch = str1.charAt(i);
17+
hashMap.put(ch, hashMap.getOrDefault(ch, 0) + 1);
18+
}
19+
20+
for(int j=0; j< str2.length(); j++) {
21+
char ch = str2.charAt(j);
22+
if(hashMap.containsKey(ch)) {
23+
if(hashMap.get(ch) == 1) {
24+
hashMap.remove(ch);
25+
} else if(hashMap.get(ch) > 1) {
26+
hashMap.put(ch, hashMap.get(ch)-1);
27+
}
28+
} else {
29+
return false;
30+
}
31+
}
32+
33+
if(hashMap.size() == 0) {
34+
return true;
35+
} else {
36+
return false;
37+
}
38+
}
39+
40+
//Using Array: TC:O(n) SC:O(1)
41+
42+
private static boolean validAnagram2(String str1, String str2) {
43+
if(str1.length() != str2.length()) return false;
44+
45+
int[] chars = new int[26];
46+
47+
for(int i=0; i< str1.length(); i++) {
48+
char ch1 = str1.charAt(i);
49+
char ch2 = str2.charAt(i);
50+
chars[ch1 - 'a']++;
51+
chars[ch2 - 'a']--;
52+
}
53+
54+
for(int ch: chars) {
55+
if(ch !=0) return false;
56+
}
57+
58+
return true;
59+
}
60+
61+
public static void main(String[] args) {
62+
String s1 = "anagram", s2="nagaram";
63+
System.out.println(validAnagram1(s1, s2));
64+
String t1 = "cat", t2="rat";
65+
System.out.println(validAnagram1(t1, t2));
66+
67+
String a1 = "anagram", a2="nagaram";
68+
System.out.println(validAnagram2(a1, a2));
69+
String b1 = "cat", b2="rat";
70+
System.out.println(validAnagram1(b1, b2));
71+
}
72+
}

src/java1/algorithms/strings/longestRepeatingCharReplacement.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//Sliding window: TC:O(n) SC: O(1)
22
package java1.algorithms.strings;
33

4-
public class longestRepeatingCharReplacement {
4+
public class LongestRepeatingCharReplacement {
55
private static int longestCharReplacement(String str, int target) {
66
int[] charCount = new int[26];
77
int maxLength = 0;

src/java1/algorithms/strings/longestSubstringWithoutRepeatingChar.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import java.util.HashSet;
55

6-
public class longestSubstringWithoutRepeatingChar {
6+
public class LongestSubstringWithoutRepeatingChar {
77
private static int longestSubstringLengthWithoutRepeatingChar(String str) {
88
HashSet<Character> hashset = new HashSet<>();
99
int left = 0, max = 0;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Sort and compare:- TC: O(n logn) SC: O(n)
2+
function validAnagram1(str1, str2) {
3+
if(str1.length !== str2.length) return false;
4+
5+
return reorderStr(str1) === reorderStr(str2);
6+
}
7+
8+
const reorderStr = (str) =>
9+
str.split("")
10+
.sort((a, b) => a.localeCompare(b))
11+
.join("");
12+
13+
14+
// Using array:- TC:O(n) SC:O(1)
15+
function validAnagram2(str1, str2) {
16+
if(str1.length !== str2.length) return false;
17+
18+
let chars = new Array(26).fill(0);
19+
20+
for(let i=0; i< str1.length; i++) {
21+
let ch1 = str1.charCodeAt(i);
22+
let ch2 = str2.charCodeAt(i);
23+
chars[ch1-97]++;
24+
chars[ch2-97]--;
25+
}
26+
27+
return chars.every((n) => n === 0);
28+
}
29+
30+
// Using Map:- TC:O(n) SC: O(n)
31+
function validAnagram3(str1, str2) {
32+
if(str1.length != str2.length) return false;
33+
34+
let map = new Map();
35+
36+
for(let ch of str1) {
37+
map.set(ch, (map.get(ch) || 0) + 1);
38+
}
39+
40+
for(let ch of str2) {
41+
if(map.has(ch)) {
42+
map.set(ch, map.get(ch)-1);
43+
if(map.get(ch) === 0) map.delete(ch);
44+
} else {
45+
return false;
46+
}
47+
}
48+
49+
if(map.size === 0) return true;
50+
}
51+
52+
53+
let a1="anagram", a2="nagaram";
54+
console.log(validAnagram1(a1, a2));
55+
console.log(validAnagram2(a1, a2));
56+
console.log(validAnagram3(a1, a2));
57+
let b1="cat", b2="rat";
58+
console.log(validAnagram1(b1, b2));
59+
console.log(validAnagram2(b1, b2));
60+
console.log(validAnagram3(b1, b2));

0 commit comments

Comments
 (0)