题目描述
给定两个字符串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;
}
原文:https://www.cnblogs.com/jw-zhao/p/14743850.html