Microsoft Interview Question
Software Engineer / DevelopersCountry: India
Interview Type: Written Test
public static boolean isAnagrams(String str1, String str2)
{
if(str1 == null && str2 == null)
return true;
if(str1 == null || str2 == null)
return false;
char[] charArray1 = str1.toCharArray();
char[] charArray2 = str2.toCharArray();
Map<Character, Integer> charCount1 = new HashMap<Character, Integer>();
for(int i = 0; i < charArray1.length; i++)
{
if(charArray1[i] != ' ')
{
Integer value = charCount1.get(charArray1[i]);
if(value == null)
value = 0;
charCount1.put(charArray1[i], ++value);
}
}
Map<Character, Integer> charCount2 = new HashMap<Character, Integer>();
for(int i = 0; i < charArray2.length; i++)
{
if(charArray2[i] != ' ')
{
Integer value = charCount2.get(charArray2[i]);
if(value == null)
value = 0;
charCount2.put(charArray2[i], ++value);
}
}
int len1 = charCount1.keySet().size();
int len2 = charCount2.keySet().size();
if(len1 != len2)
return false;
Iterator<Character> it = charCount1.keySet().iterator();
while(it.hasNext())
{
Character current = it.next();
Integer count1 = charCount1.get(current);
Integer count2 = charCount2.get(current);
if(count1 != count2)
return false;
}
return true;
}
this is a solution for this question
#include<stdio.h>
#include<string.h>
main()
{
char str1[20],str2[20];
printf("enter 2 strings..\n");
gets(str1);
gets(str2);
if(strlen(str1)==strlen(str2))
{
char ch;
int i=0;
for(i=0;str1[i];i++)
{
int j=0,k=0,l=0;
ch=str1[i];
for(j=0;str1[j];j++)
if(ch==str1[j])
k++;
for(j=0;str2[j];j++)
if(str2[j]==ch)
l++;
if(k!=l)
break;
}
if(i==strlen(str1))
printf("both strings are with same alphabets..\n");
}
}
Possible solution in python:
def is_anagram(x1,x2)
x1 = ''".join(x1.split(' '))
x2 = "".join(x2.split(' '))
return sorted(x1) == sorted(x2)
#include <stdio.h>
int main()
{
int i=0,j=0;
char *first = (char*)malloc(sizeof(50));
char *second = (char*)malloc(sizeof(50));
scanf("%[^\n]s\n",first);
scanf("%[^\n]s\n",second);
while(*first != '\0')
{
if(*first != ' ')
{
i = i + *first;
}
first++;
}
while(*second != '\0')
{
if(*second != ' ')
{
j = j + *second;
}
second++;
}
if(i == j)
{
printf("Anagram");
}
else
{
printf("not anagram");
}
return 0;
}
#include<stdio.h>
#include<string.h>
main()
{
char str1[20],str2[20];
printf("enter 2 strings..\n");
gets(str1);
gets(str2);
if(strlen(str1)==strlen(str2))
{
char ch;
int i=0;
for(i=0;str1[i];i++)
{
int j=0,k=0,l=0;
ch=str1[i];
for(j=0;str1[j];j++)
if(ch==str1[j])
k++;
for(j=0;str2[j];j++)
if(str2[j]==ch)
l++;
if(k!=l)
break;
}
if(i==strlen(str1))
printf("both strings are with same alphabets..\n");
}
}
#include<stdio.h>
#include<string.h>
main()
{
char str1[20],str2[20];
printf("enter 2 strings..\n");
gets(str1);
gets(str2);
if(strlen(str1)==strlen(str2))
{
char ch;
int i=0;
for(i=0;str1[i];i++)
{
int j=0,k=0,l=0;
ch=str1[i];
for(j=0;str1[j];j++)
if(ch==str1[j])
k++;
for(j=0;str2[j];j++)
if(str2[j]==ch)
l++;
if(k!=l)
break;
}
if(i==strlen(str1))
printf("both strings are with same alphabets..\n");
}
}
short arr[26] = {0};
bool isAnagram(const char * str1, const char* str2){
bool retVal = true;
for(int ii = 0; ii < strlen(str1); ii++){
if(str1[ii] == ' ') continue;
arr[str1[ii] - 'a']++;
}
for(int ii = 0; ii < strlen(str2); ii++){
if(str2[ii] == ' ') continue;
arr[str2[ii] - 'a']--;
}
for(int ii = 0; ii < 26; ii++){
if(arr[ii]) {
retVal = false;
break;
}
}
return retVal;
}
#include <algorithm>
bool IsAnagram(string inString1, string inString2)
{
//remove whitespace
inString1.erase(remove(inString1.begin(), inString1.end(), ' '), inString1.end());
inString2.erase(remove(inString2.begin(), inString2.end(), ' '), inString2.end());
//sort
sort(inString1.begin(), inString1.end());
sort(inString2.begin(), inString2.end());
return(inString1 == inString2);
}
- yash1990singla January 04, 2013