Program to check two Strings are Anagram or not using Hashmap in Java
Today we are going to write a program to find or check whether two strings are an anagram or not using hashmap in Java. First, we should know what are anagrams. Anagrams are those words in which all the alphabets remain the same but their order is not. For eg.
hello kite lata cap ellho tike tapa pat These are anagrams These are not anagram
Now in hashing we mark all the unique alphabets and keep a count that how many are these in a given string. Then we put this data into a hashmap in the form of (key, value) pair. Here the alphabet will be key and value will be its occurrences in the string For eg. hashmap of “Apple” would look like this –
alphabet – number of occurrences
a 1
p 2
l 1
e 1
You may also take a look at this: How to check whether two strings are anagram or not in Java?
Check two Strings are Anagram or not using Hashmap in Java
Now for two string to be anagram their hashmap will look the same. hence we can compare them and can tell if the strings are anagram or not.
import java.util.HashMap; import java.util.Scanner; public class ANAGRAM_STRING { public static void main(String[] args) { Scanner sc=new Scanner (System.in); String st1=sc.next(); String st2=sc.next(); Boolean result=anagram(st1,st2); if(result==true) System.out.println("congrat! these are anagrams"); else System.out.println("these are not anagrams"); } static boolean anagram(String st1, String st2) { HashMap<Character ,Integer> map1= new HashMap<Character ,Integer>(); HashMap<Character ,Integer> map2= new HashMap<Character ,Integer>(); int len1=st1.length(); int len2=st2.length(); char[] arr1=st1.toCharArray(); char[] arr2=st2.toCharArray(); if(len1!=len2) { return false; } else { for(int i=0;i<len1;i++) { if(map1.get(arr1[i])==null) map1.put(arr1[i], 1); else { int count1= (int)map1.get(arr1[i]); map1.put(arr1[i], ++count1); } } for(int j=0;j<len2;j++) { if(map2.get(arr2[j])==null) map2.put(arr2[j], 1); else { int count2=(int)map2.get(arr2[j]); map2.put(arr2[j], ++count2); } } if(map1.equals(map2)) return true; else return false; } } }
Output:
sachin sinchan these are not anagrams forest refost congrat! these are anagrams
The complexity of this solution is O(n), which is much better than the naive solution. The naive solution for this problem will be to solve it with the help of two for loops where we compare each alphabet of string 1 with each one of string 2. The complexity of this solution will be O(n²).
Leave a Reply