Mick and John were in a 100 meter race. When Mick crossed the finish line, John was only at the 90 meter mark. Mick suggested they run another race. This time, Mick would start ten meters behind the starting line. All other things being equal, will John win, lose, or will it be a tie in the second race?
John will lose again. In the second race, Mick started ten meters back. By the time John reaches the 90 meter mark, Mick will have caught up him. Therefore, the final ten meters will belong to the faster of the two. Since Mick is faster than John, he will win the final 10 meters and of course the race.
Many years ago a wealthy old man was near death. He wished to leave his fortune to one of his three children. The old man wanted to know that his fortune would be in wise hands. He stipulated that his estate would be left to the child who would sing him half as many songs as days that he had left to live.The eldest son said he couldn't comply because he didn't know how many days his father had left to live and besides he was too busy. The youngest son said the same thing. The man ended up leaving his money to his third child a daughter. What did his daughter do?
Every other day, the daughter sang her father a song.
A blind man walks into a hardware store to buy a hammer. There are hammers hanging behind the front desk, but obviously the blind man isn't able to see them. And yet a few minutes later, he happily walks out of the store, having just purchased a new hammer.
How did he do it?
He walks up the the front desk where the clerk is working and says "I'd like to buy a hammer."
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.
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)
for each character in S1
arrayIndex = mapCharacterToNumber(character) //maps "a" to 0, "b" to 1, "c" to 2, etc...
A[arrayIndex] += 1
for each character in S2
arrayIndex = mapCharacterToNumber(character)
A[arrayIndex] -= 1
for (i = 0; i < 26; i++)
if A[i] != 0