About Me

Wednesday, February 16, 2011

Anagram Cracker

Two words are anagrams if and only if they contain the exact same letters with the exact same frequency (for example, "name" and "mean" are anagrams, but "red" and "deer" are not).

Given two strings S1 and S2, which each only contain the lowercase letters a through z, write a program to determine if S1 and S2 are anagrams. The program must have a running time of O(n + m), where n and m are the lengths of S1 and S2, respectively, and it must have O(1) (constant) space usage.

2 comments:

  1. First create an array A of length 26, representing the counts of each letter of the alphabet, with each value initialized to 0. Iterate through each character in S1 and add 1 to the corresponding entry in A. Once this iteration is complete, A will contain the counts for the letters in S1. Then, iterate through each character in S2, and subtract 1 from each corresponding entry in A. Now, if the each entry in A is 0, then S1 and S2 are anagrams; otherwise, S1 and S2 aren't anagrams.

    Here is pseudocode for the procedure that was described:

    def areAnagrams(S1, S2)
    A = new Array(26)
    A.initializeValues(0)
    for each character in S1
    arrayIndex = mapCharacterToNumber(character) //maps "a" to 0, "b" to 1, "c" to 2, etc...
    A[arrayIndex] += 1
    end

    for each character in S2
    arrayIndex = mapCharacterToNumber(character)
    A[arrayIndex] -= 1
    end

    for (i = 0; i < 26; i++)
    if A[i] != 0
    return false
    end
    end
    return true
    end

    ReplyDelete

Hi thanks , we will get back to you shortly !!!