基础题,暴力破解即可。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//计算a和b的最大公约数
int gcd(int a, int b)
{
return a % b == 0 ? b : gcd(b, a % b);
}
int main()
{
string s1, s2;
while (cin >> s1)
{
if (s1 == "-1")
break;
cin >> s2;
int common = 0; //最大匹配字母数
int len1 = s1.size();
int len2 = s2.size();
for (int i = 0; i < len1; i++)
{
for (int j = 0; j < len2; j++)
{
int tmpCommon = 0; //当前情况匹配字母数
int remain = min(len1 - i, len2 - j);
for (int k = 0; k < remain; k++)
{
if (s1[i + k] == s2[j + k])
++tmpCommon;
}
common = max(common, tmpCommon);
}
}
common *= 2;
int sumLen = len1 + len2;
int num = gcd(common, sumLen);
common /= num;
sumLen /= num;
cout << "appx(" << s1 << "," << s2 << ")" << " = ";
if (common == sumLen)
cout << 1 << endl;
else if (common == 0)
cout << 0 << endl;
else
cout << common << "/" << sumLen << endl;
}
return 0;
}
继续加油。