$show=/label

Java - Checking Whether Two Strings are Anagrams

SHARE:

A quick guide to check if the two strings are anagrams or not in java.

1. Overview

In this tutorial, We'll learn how to check if the two given strings are anagrams or not in java programming language.

Anagram means two string should be same characters but order is not important. So, that means characters can be another order.

Note that character count also should be matched. Suppose if the string1 has 10 chars where as string 2 has 9 characters so these two are not anagams.

Java - Checking Whether Two Strings are Anagrams


Example 1:

String 1: "abaac"

String 2: "caaba"

Output: true

Example 2:

String 1: "listen"

String 2: "silent"

Output: true

Example 3:

String 1: "aap"

String 2: "pap"

Output: false

2. Java - Checking Whether Two Strings are Anagrams Using Sort

First solution is sort the first two string characters and then compare them. If both strings are same then these two strings are anagrams. If the two strings are not same then strings are not anagrams.

Use Arrays.sort() method to sort the string character as char array.

Use String.equals() method to compare the two strings contents.

Look at the below code.

Time complexicity: O(nlogn)

package com.javaprogramto.programs.strings.anagrams;

import java.util.Arrays;

public class CheckStringsAnagramsExample {

	public static void main(String[] args) {

		String str1 = "abaac";
		String str2 = "caaba";

		boolean isAnagram = isStrinsAnagrams(str1, str2);
		System.out.println(isAnagram);

		str1 = "listen";

		str2 = "silent";

		isAnagram = isStrinsAnagrams(str1, str2);
		System.out.println(isAnagram);

		str1 = "aap";

		str2 = "pap";

		isAnagram = isStrinsAnagrams(str1, str2);
		System.out.println(isAnagram);

	}

	private static boolean isStrinsAnagrams(String str1, String str2) {

		// converting str1 to char array
		char[] strCharArray1 = str1.toCharArray();

		// converting str2 to char array
		char[] strCharArray2 = str2.toCharArray();

		// sorting two strings char arrays using Arrays.sort() method
		Arrays.sort(strCharArray1);
		Arrays.sort(strCharArray2);

		// converting char arrays back to strings
		str1 = new String(strCharArray1);
		str2 = new String(strCharArray2);

		// comparing two strings
		if (str1.equals(str2))
			return true;

		return false;
	}

}

Output:

true
true
false

3. Java - Checking Whether Two Strings are Anagrams - Optimized Solution

The above solution takes nlogn logarthemetic execution time. This may not work for the larger input data.

We need to always think before using sorting logic on any problem.

To avoid sorting, we need to think different for better approach.

Here is problem is we need to check each and every character of string 1 is present in the string 2.

Actually, for this problem sorting is not an efficient answer.

We will take one integer array with size of 256. This value is the typical characters are stored in 8 bits so there will be only 256 possible characters.

By default, all values in the int array are initialized with 0.

First, Take the each character from the string and go to the corresponding location in the int array increaemtn by 1 and repeat the same process.

Next, take the each character from second string and go the corresponding location in the same int array, decrement the value 1.

If the one character is present in both strings then first count is increment by 1 and decreemnted by 1. So, count value in the int array becomes 0.

If the one character is present in the first array and the same character element is not present in the second string then the value in the count array will non zero value.

After traversing the two strings, we will check the counts int array values, if any index value is non zero then two strings are not anagrams. 

If all values in the count array is zero then inputs are anagrams.

Look at the below code.

package com.javaprogramto.programs.strings.anagrams;

public class CheckStringsAnagramsExample2 {

	public static void main(String[] args) {

		String str1 = "abaac";
		String str2 = "caaba";

		boolean isAnagram = isStrinsAnagramsOptimized(str1, str2);
		System.out.println(isAnagram);

		str1 = "listen";

		str2 = "silent";

		isAnagram = isStrinsAnagramsOptimized(str1, str2);
		System.out.println(isAnagram);

		str1 = "aap";

		str2 = "pap";

		isAnagram = isStrinsAnagramsOptimized(str1, str2);
		System.out.println(isAnagram);

	}

	private static boolean isStrinsAnagramsOptimized(String str1, String str2) {

		// if two strings lengths are not same then return false
		if (str1.length() != str2.length()) {
			return false;
		}
		int arraySize = 256;

		int[] countsArray = new int[arraySize];

		// increment by 1 from str1, decrement by 1 from str2
		for (int i = 0; i < str1.length(); i++) {
			countsArray[str1.charAt(i)]++;
			countsArray[str2.charAt(i)]--;
		}

		// checking any value is non zero in the counts arrray.
		for (int i = 0; i < countsArray.length; i++) {
			if (countsArray[i] != 0) {
				return false;
			}
		}

		return true;
	}
}


Output:

true
true
false

This code also generates the same output with O(n).

Time complexity: O(n)

Space complexity: O(256)

4. Conclusion

In this tutorial, We've seen how to check if the two strings are Anagrams or not in java.

GitHub

How to sort an array in Java 8 - Arrays.sort()?

How to count substring occurrences in String in Java?

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java - Checking Whether Two Strings are Anagrams
Java - Checking Whether Two Strings are Anagrams
A quick guide to check if the two strings are anagrams or not in java.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhz-7dTo1QIKeYjofdhl9UnCyWOSwH5DxSfIRJnbcyZOwuI9xNty_Pg-wFgsT684GUgeNloLv7bfFg6NfYdmfWJD9tYNo2Svo1XVFXUL9_VeiX3Spr_oGPDOS8icwQ_pj3aVRr6-1Pvy0/w400-h297/Java+-+Checking+Whether+Two+Strings+are+Anagrams.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhz-7dTo1QIKeYjofdhl9UnCyWOSwH5DxSfIRJnbcyZOwuI9xNty_Pg-wFgsT684GUgeNloLv7bfFg6NfYdmfWJD9tYNo2Svo1XVFXUL9_VeiX3Spr_oGPDOS8icwQ_pj3aVRr6-1Pvy0/s72-w400-c-h297/Java+-+Checking+Whether+Two+Strings+are+Anagrams.png
JavaProgramTo.com
https://www.javaprogramto.com/2021/11/java-check-string-anagrams.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2021/11/java-check-string-anagrams.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content