O(m + n)算法:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "ABCDEFGHLMNOPQRS";
string s2 = "DCGSRQPO";
int num = 0;
int arr[26] = {0};
for (int i = 0; i < s2.length(); ++i)
{
arr[s2.at(i) - 'A'] = 1;
++num;
}
for (int i = 0; i < s1.length(); ++i)
{
if (arr[s1.at(i) - 'A'] == 1)
--num;
}
if (num == 0)
printf("True\n");
else
printf("False\n");
}
Prime算法:
#include <iostream>
#include <string>
using namespace std;
const int arr[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};
int main()
{
string s1 = "ACDGHMNOPQRS";
string s2 = "DCGSRQPOM";
int i, j;
long long int num = 1;
for (i = 0; i < s1.length(); ++i)
num *= arr[s1.at(i) - 'A'];
for (j = 0; j < s2.length(); ++j)
{
if (num % arr[s2.at(j) - 'A'] != 0)
break;
}
if (s2.length() == j)
printf("True\n");
else
printf("False\n");
}