A.Anagram

原题链接
题目描述
给定两个字符串s1,s2,求把s1变成s2的最小步数,
s2可以任意改变顺序 比如ELLY要变成KRIS,可以把KRIS变成IRSK,那么就是把E变成K(只能向后变,比如要把B,变成A就需要25个步数),L变成R...最后的最小步数是29步
因为题目数据范围只有50可以使用一个一个枚举过

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
bool book[100];
int main()
{
    string s1, s2;
    while(cin >> s1 >> s2)
    {
        memset(book, 0, sizeof book);
        int res = 0;
        for(int i = 0; i < s1.size(); i ++ )
        {
            int min = 30, k;
            for(int j = 0; j < s2.size(); j ++ )
            {
                int x = s2[j] - s1[i];
                if(x < 0)x += 26;
                if(book[j] == 0 && min > x)
                {
                    min = x;
                    k = j;
                }
            }
            book[k] = 1;
            res += min;
        }
        cout << res << endl;
    }
    return 0;
}
posted @ 2021-05-08 10:23  梨花满地  阅读(54)  评论(0)    收藏  举报