patterncppModerate
Check if two strings are anagrams
Viewed 0 times
anagramsaretwocheckstrings
Problem
I'm doing some practice questions from the book Cracking the coding interview and wanted to get some people to review my code for bugs and optimizations.
Question:
Write a method to decide if two strings are anagrams or not.
Question:
Write a method to decide if two strings are anagrams or not.
/*
Time complexity: O(n^2)
Space complexity: O(n)
*/
bool IsAnagram(std::string str1, std::string str2)
{
if(str1.length() != str2.length())
return false;
for(int i = 0; i < str1.length();i++)
{
bool found = false;
int j = 0;
while(!found && j < str2.length())
{
if(str1[i] == str2[j])
{
found = true;
str2[j] = NULL;
}
j++;
}
if(!found)
return false;
}
return true;
}Solution
Since you only modify a copy of the second string, the first one should be a
Also,
However, I think I'd do it like this:
Test program:
Program output
const reference:bool IsAnagram(const std::string &str1, std::string str2)Also,
i and j should be of type size_t to match what they're compared with.However, I think I'd do it like this:
bool IsAnagram2(std::string str1, std::string str2)
{
std::sort(str1.begin(), str1.end());
std::sort(str2.begin(), str2.end());
return str1==str2;
}Test program:
#include
#include
#include
#define SHOW(x) std::cout << # x " = " << x << '\n'
int main()
{
std::cout << std::boolalpha;
SHOW(IsAnagram("\0\0\0\0\0", "\0lehl"));
SHOW(IsAnagram("hello", ""));
SHOW(IsAnagram("\0\0\0\0\0", "olehl"));
SHOW(IsAnagram("hello", "ole"));
SHOW(IsAnagram("hello", "plehl"));
SHOW(IsAnagram("hello", "hello"));
SHOW(IsAnagram("hello", "12345"));
SHOW(IsAnagram("hello", "Hello"));
SHOW(IsAnagram("hello", "oellh"));
SHOW(IsAnagram("hello", "olelh"));
SHOW(IsAnagram("hello", "elelh"));
}Program output
IsAnagram("\0\0\0\0\0", "\0lehl") = true
IsAnagram("hello", "") = false
IsAnagram("\0\0\0\0\0", "olehl") = false
IsAnagram("hello", "ole") = false
IsAnagram("hello", "plehl") = false
IsAnagram("hello", "hello") = true
IsAnagram("hello", "12345") = false
IsAnagram("hello", "Hello") = false
IsAnagram("hello", "oellh") = true
IsAnagram("hello", "olelh") = true
IsAnagram("hello", "elelh") = falseCode Snippets
bool IsAnagram(const std::string &str1, std::string str2)bool IsAnagram2(std::string str1, std::string str2)
{
std::sort(str1.begin(), str1.end());
std::sort(str2.begin(), str2.end());
return str1==str2;
}#include <iostream>
#include <string>
#include <algorithm>
#define SHOW(x) std::cout << # x " = " << x << '\n'
int main()
{
std::cout << std::boolalpha;
SHOW(IsAnagram("\0\0\0\0\0", "\0lehl"));
SHOW(IsAnagram("hello", ""));
SHOW(IsAnagram("\0\0\0\0\0", "olehl"));
SHOW(IsAnagram("hello", "ole"));
SHOW(IsAnagram("hello", "plehl"));
SHOW(IsAnagram("hello", "hello"));
SHOW(IsAnagram("hello", "12345"));
SHOW(IsAnagram("hello", "Hello"));
SHOW(IsAnagram("hello", "oellh"));
SHOW(IsAnagram("hello", "olelh"));
SHOW(IsAnagram("hello", "elelh"));
}IsAnagram("\0\0\0\0\0", "\0lehl") = true
IsAnagram("hello", "") = false
IsAnagram("\0\0\0\0\0", "olehl") = false
IsAnagram("hello", "ole") = false
IsAnagram("hello", "plehl") = false
IsAnagram("hello", "hello") = true
IsAnagram("hello", "12345") = false
IsAnagram("hello", "Hello") = false
IsAnagram("hello", "oellh") = true
IsAnagram("hello", "olelh") = true
IsAnagram("hello", "elelh") = falseContext
StackExchange Code Review Q#69883, answer score: 12
Revisions (0)
No revisions yet.