#include <algorithm>

using namespace std;

float semblance (string a, string b)
{
    if (a.size () > b.size ())
        swap<string> (a, b);
    float step = 1.0 * b.size () / b.size ();
    float start = 0.0;
    int   samenum = 0;
    for (int i = 0; i < a.size (); ++i) {
        for (int j = start; j < start+4*step && j < b.size (); ++j)
            if (a[i] == b[j]) {
                samenum++;
                break;
            }
        start += step;
    }

    return 1.0*samenum/b.size ();
}
这个应该算蒙特卡罗方法吧? 方法是从a串中取字符,估计它在b串中的大致范围.