Check Permutation

1.2 Check Permutation: Given two strings, write a method to decide if one is a permutation of the other.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

// O(nlogn) + O(n) algorithm
bool isPermutation(string one, string two) {
    sort(one.begin(), one.end());
    sort(two.begin(), two.end());
    if (one == two)
        return true;
    return false;
}

int main()
{
    cout << boolalpha << isPermutation("god", "dog") << endl;
    cout << boolalpha << isPermutation("daddad", "dadsds") << endl;
    cout << boolalpha << isPermutation("abcdefg", "gfedcba") << endl;
}
#include <iostream>
#include <string>

using namespace std;

// Assumed ASCII
// O(3n) algorithm
// O(1) space
bool isPermutation(string one, string two) {
    if (one.length() != two.length())
        return false;

    int checker[256] = { 0 };
    // initialize all to zero

    for (int i = 0; i < one.size(); i++) {
        int val = one.at(i);
        ++checker[val];
    }

    for (int i = 0; i < two.size(); i++) {
        int val = two.at(i);
        --checker[val];
    }

    for (int i = 0; i < sizeof(checker) / sizeof(int); i++) {
        if (checker[i] != 0) return false;
    }
    return true;
}

int main()
{
    cout << boolalpha << isPermutation("god", "dog") << endl;
    cout << boolalpha << isPermutation("daddad", "dadsds") << endl;
    cout << boolalpha << isPermutation("abcdefg", "gfedcba") << endl;
}

Last updated