-
题目大意
给定两个字符串,将第一个字符串变为和第二个字符串含有元素相同的字符串,字符可以变成任意字符,保证改变的次数最少,在改变次数最少的前提下输出字典序最小的字符串。 -
思路
在确定一个题怎么做的时候要知道自己求什么。
首先求改变字符的次数,其次输出一个字符串。首先先统计每个字符串中字符的个数。什么时候字符会改变,当第一个字符串中一个字符的个数大于第二个字符时,该字符有可能改变,变成的字符应该是第二个字符串中比第一个字符串多的字符,一定会改变是指改变当前字符可以使字符串字典序变小。按照这个思路从前往后枚举第一个字符串的元素最后得到的改变次数最少并且就是字典序最小的。 -
代码
#include<bits/stdc++.h>
using namespace std;
int a[30],b[30];
string s1,s2;
int main()
{
ios::sync_with_stdio(false);
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>s1>>s2;
for(int i=0; i<s1.size(); i++)
{
a[s1[i]-'A']++;
b[s2[i]-'A']++;
}
int x;
int ans=0;
for(int i=0; i<s1.size(); i++)
{
x=s1[i]-'A';
if(a[x]>b[x])
{
for(int j=0; j<26; j++)
if(a[j]<b[j])
{
if(j<x||!b[x])
{
s1[i]=j+'A';
b[j]--;
ans++;
}
else
b[x]--;
break;
}
a[x]--;
}
}
cout<<ans<<endl;
cout<<s1<<endl;
return 0;
}