Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if two words are anagrams

I have a program that shows you whether two words are anagrams of one another. There are a few examples that will not work properly and I would appreciate any help, although if it were not advanced that would be great, as I am a 1st year programmer. "schoolmaster" and "theclassroom" are anagrams of one another, however when I change "theclassroom" to "theclafsroom" it still says they are anagrams, what am I doing wrong?

import java.util.ArrayList; public class AnagramCheck {     public static void main(String args[]) {         String phrase1 = "tbeclassroom";         phrase1 = (phrase1.toLowerCase()).trim();         char[] phrase1Arr = phrase1.toCharArray();          String phrase2 = "schoolmaster";         phrase2 = (phrase2.toLowerCase()).trim();         ArrayList<Character> phrase2ArrList = convertStringToArraylist(phrase2);          if (phrase1.length() != phrase2.length()) {             System.out.print("There is no anagram present.");         } else {             boolean isFound = true;             for (int i = 0; i < phrase1Arr.length; i++) {                 for (int j = 0; j < phrase2ArrList.size(); j++) {                     if (phrase1Arr[i] == phrase2ArrList.get(j)) {                         System.out.print("There is a common element.\n");                         isFound =;                         phrase2ArrList.remove(j);                     }                 }                 if (isFound == false) {                     System.out.print("There are no anagrams present.");                     return;                 }             }             System.out.printf("%s is an anagram of %s", phrase1, phrase2);         }     }      public static ArrayList<Character> convertStringToArraylist(String str) {         ArrayList<Character> charList = new ArrayList<Character>();         for (int i = 0; i < str.length(); i++) {             charList.add(str.charAt(i));         }         return charList;     } } 
like image 769
Chilli Avatar asked Feb 23 '13 21:02

Chilli


People also ask

How do you know if two words are anagrams?

Two words are anagrams of each other if they contain the same number of characters and the same characters. You should only need to sort the characters in lexicographic order, and determine if all the characters in one string are equal to and in the same order as all of the characters in the other string.

How do you check if two words are anagrams in Python?

lower() # check if length is same if(len(str1) == len(str2)): # sort the strings sorted_str1 = sorted(str1) sorted_str2 = sorted(str2) # if sorted char arrays are same if(sorted_str1 == sorted_str2): print(str1 + " and " + str2 + " are anagram.") else: print(str1 + " and " + str2 + " are not anagram.") else: print(str1 ...


2 Answers

Two words are anagrams of each other if they contain the same number of characters and the same characters. You should only need to sort the characters in lexicographic order, and determine if all the characters in one string are equal to and in the same order as all of the characters in the other string.

Here's a code example. Look into Arrays in the API to understand what's going on here.

public boolean isAnagram(String firstWord, String secondWord) {      char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();      char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();      Arrays.sort(word1);      Arrays.sort(word2);      return Arrays.equals(word1, word2); } 
like image 171
Makoto Avatar answered Oct 01 '22 22:10

Makoto


Fastest algorithm would be to map each of the 26 English characters to a unique prime number. Then calculate the product of the string. By the fundamental theorem of arithmetic, 2 strings are anagrams if and only if their products are the same.

like image 23
SeriousBusiness Avatar answered Oct 01 '22 21:10

SeriousBusiness