Program to find anagram words from given dictionary using prime numbers

Here is the code :

#include <iostream>
#include <conio.h>
#include <string>

using namespace std;

void main()
{
  int prime[26] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101 };
  string dictionary[] = { "duplicate", "licdupate", "duplteica", "catedupli", "plicduate", "patelicdu", "duplicata", "duplacate" };
  char *search = "duplicate";
  const int kElem = 8;
  int len = strlen(search);
  long long search_product = 1;

  for (int index = 0; index < len; ++index)
  {
    search_product *= prime[search[index] - 'a'];
  }

  for (int index = 0; index < kElem; ++index)
  {
    const char *text = dictionary[index].c_str();

    int textLen = strlen(text);
    long long result = 1;

    for (int charIndex = 0; charIndex < textLen; ++charIndex)
    {
      result *= prime[text[charIndex] - 'a'];
    }


    if (result == search_product) {
      cout << index + 1 << ". '" << text << "' is anagram to " << search << endl;
    }
    else {
      cout << index + 1 << ". '" << text << "' is not anagram to " << search << endl;
    }
  }
  _getch();
}

Thanks

Another Method to do the same without using prime number.

Comments

Popular Posts