finding if two words are anagrams of each other

后端 未结 22 1082
隐瞒了意图╮
隐瞒了意图╮ 2020-11-27 14:51

I am looking for a method to find if two strings are anagrams of one another.

Ex: string1 - abcde
string2 - abced
Ans = true
Ex: string1 - abcde
string2 - ab         


        
相关标签:
22条回答
  • 2020-11-27 15:26
    /* Program to find the strings are anagram or not*/
    /* Author Senthilkumar M*/
    
    Eg. 
        Anagram:
        str1 = stackoverflow
        str2 = overflowstack
    
        Not anagram:`enter code here`
        str1 = stackforflow
        str2 = stacknotflow
    
    int is_anagram(char *str1, char *str2)
    {
            int l1 = strlen(str1);
            int l2 = strlen(str2);
            int s1 = 0, s2 = 0;
            int i = 0;
    
            /* if both the string are not equal it is not anagram*/
            if(l1 != l2) {
                    return 0;
            }
            /* sum up the character in the strings 
               if the total sum of the two strings is not equal
               it is not anagram */
            for( i = 0; i < l1; i++) {
                    s1 += str1[i];
                    s2 += str2[i];
            }
            if(s1 != s2) {
                    return 0;
            }
            return 1;
    }
    
    0 讨论(0)
  • 2020-11-27 15:27

    I guess your sorting algorithm is not really O(log n), is it?

    The best you can get is O(n) for your algorithm, because you have to check every character.

    You might use two tables to store the counts of each letter in every word, fill it with O(n) and compare it with O(1).

    0 讨论(0)
  • 2020-11-27 15:31

    How about Xor'ing both the strings??? This will definitely be of O(n)

    char* arr1="ab cde";
    int n1=strlen(arr1);
    char* arr2="edcb a";
    int n2=strlen(arr2);
    // to check for anagram;
    int c=0;
    int i=0, j=0;   
    if(n1!=n2) 
      printf("\nNot anagram");
    else {
       while(i<n1 || j<n2)
       {
           c^= ((int)arr1[i] ^ (int)arr2[j]);
           i++;
           j++;
       }
    }
    
    if(c==0) {
        printf("\nAnagram");
    }
    else printf("\nNot anagram");
    

    }

    0 讨论(0)
  • 2020-11-27 15:31

    in java we can also do it like this and its very simple logic

    import java.util.*;
    
    class Anagram
    {
     public static void main(String args[]) throws Exception
     {
      Boolean FLAG=true;
    
      Scanner sc= new Scanner(System.in);
    
      System.out.println("Enter 1st string");
    
      String s1=sc.nextLine();
    
      System.out.println("Enter 2nd string");
    
      String s2=sc.nextLine();
    
      int i,j;
      i=s1.length();
      j=s2.length();
    
      if(i==j)
      {
       for(int k=0;k<i;k++)
       {
        for(int l=0;l<i;l++)
        {
         if(s1.charAt(k)==s2.charAt(l))
         {
          FLAG=true;
          break;
         }
         else
         FLAG=false;
        }
       }
      }
      else
      FLAG=false;
      if(FLAG)
      System.out.println("Given Strings are anagrams");
      else
      System.out.println("Given Strings are not anagrams");
     }
    }
    
    0 讨论(0)
提交回复
热议问题