Skip to content

Commit 4c47688

Browse files
committed
Anagrams
1 parent 0c475b9 commit 4c47688

5 files changed

Lines changed: 130 additions & 20 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.hellokoding.algorithm;
2+
3+
public class AnagramsByBruteForce {
4+
static boolean areAnagrams(String s, String t) {
5+
if (s.length() != t.length()) {
6+
return false;
7+
}
8+
9+
return areAnagramsByBackTracking(0, s, t);
10+
}
11+
12+
static boolean areAnagramsByBackTracking(int i, String s1, String s2) {
13+
if (i == s1.length()-1) {
14+
return s1.equals(s2);
15+
}
16+
17+
for(int j=i; j<s1.length(); j++) {
18+
s1 = swap(s1, i, j);
19+
20+
if (areAnagramsByBackTracking(i+1, s1, s2)) {
21+
return true;
22+
}
23+
24+
s1 = swap(s1, i, j); // backtracking
25+
}
26+
27+
return false;
28+
}
29+
30+
static String swap(String str, int i, int j) {
31+
char[] arr = str.toCharArray();
32+
33+
char temp = arr[i];
34+
arr[i] = arr[j];
35+
arr[j] = temp;
36+
37+
return String.valueOf(arr);
38+
}
39+
40+
public static void main(String[] args) {
41+
System.out.println(areAnagrams("listen", "silent"));
42+
System.out.println(areAnagrams("eleven plus two", "twelve plus one"));
43+
System.out.println(areAnagrams("rat", "car"));
44+
}
45+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.hellokoding.algorithm;
2+
3+
public class AnagramsByCounting {
4+
static boolean areAnagrams(String s, String t) {
5+
if (s.length() != t.length()) {
6+
return false;
7+
}
8+
9+
for (char ch = 'a'; ch <= 'z'; ch++) {
10+
if (countOccurrences(ch, s) != countOccurrences(ch, t)) {
11+
return false;
12+
}
13+
}
14+
15+
return true;
16+
}
17+
18+
static int countOccurrences(char c, String s) {
19+
return s.length() - s.replace(String.valueOf(c), "").length();
20+
}
21+
22+
public static void main(String[] args) {
23+
System.out.println(areAnagrams("listen", "silent"));
24+
System.out.println(areAnagrams("eleven plus two", "twelve plus one"));
25+
System.out.println(areAnagrams("rat", "car"));
26+
}
27+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.hellokoding.algorithm;
2+
3+
public class AnagramsByHistogramming {
4+
static boolean areAnagrams(String s, String t) {
5+
if (s.length() != t.length()) {
6+
return false;
7+
}
8+
9+
s = s.replaceAll("\\s", "");
10+
t = t.replaceAll("\\s", "");
11+
12+
int[] frequencies = new int[26];
13+
14+
for (int i = 0; i < s.length(); i++) {
15+
frequencies[s.charAt(i) - 'a']++;
16+
frequencies[t.charAt(i) - 'a']--;
17+
}
18+
19+
for (int count : frequencies) {
20+
if (count != 0) {
21+
return false;
22+
}
23+
}
24+
25+
return true;
26+
}
27+
28+
public static void main(String[] args) {
29+
System.out.println(areAnagrams("listen", "silent"));
30+
System.out.println(areAnagrams("eleven plus two", "twelve plus one"));
31+
System.out.println(areAnagrams("rat", "car"));
32+
}
33+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.hellokoding.algorithm;
2+
3+
import java.util.Arrays;
4+
5+
public class AnagramsBySorting {
6+
static boolean areAnagrams(String s, String t) {
7+
if (s.length() != t.length()) {
8+
return false;
9+
}
10+
11+
char[] a1 = s.toCharArray();
12+
char[] a2 = t.toCharArray();
13+
14+
Arrays.sort(a1);
15+
Arrays.sort(a2);
16+
17+
return Arrays.equals(a1, a2);
18+
}
19+
20+
public static void main(String[] args) {
21+
System.out.println(areAnagrams("listen", "silent"));
22+
System.out.println(areAnagrams("eleven plus two", "twelve plus one"));
23+
System.out.println(areAnagrams("rat", "car"));
24+
}
25+
}

‎datastructure-algorithm-java-examples/src/main/java/com/hellokoding/algorithm/String_Anagram.java‎

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)