2023-02-25力扣每日一题

链接:

https://leetcode.cn/problems/minimum-swaps-to-make-strings-equal/

题意:

给定字符串s1,s2,仅由x,y组成

每次可以在两边各挑一个字符交换

求让s1等于s2的最小步骤

解:

1000啊1000,双指针贪一下就过了

优先选择xx组合yy,只需要一步,然后处理xy和yx

然后发现好像太敷衍了,又想了想

在预先处理掉不需要考虑的位置(原来就相同的位置)情况下

可以发现,剩下的如果是偶数位,一定可以换完,因为任意两位一定含有2x2y,因为s1[i]!=s2[i]

所以判断一下新字符串长度,得出是否为-1

然后算一下每位上xy和yx的数量,因为花费一步可以解决两个xy或者两个yx,花费两步就是解决一个xy+yx,优先做费用一步的操作,数量为xy/2+yx/2

然后做费用两步的操作,由于总数为偶数,所以用xy%2*2,如果有剩余的xy就一定会有对应的yx

ans为xy/2+yx/2+xy%2*2

实际代码:

贪:

#include
using namespace std;
int solve(string s1, string s2)
{
    int ans=0;
    int lg1=s1.length(),lg2=-1;
    string t1,t2;
    for(int i=0;i>s1>>s2;
    int ans=solve(s1,s2);
    cout<

改:

#include
using namespace std;
int solve(string s1, string s2)
{
    int ans=0;
    int lg1=s1.length(),lg2=-1;
    string t1,t2;
    for(int i=0;i>s1>>s2;
    int ans=solve(s1,s2);
    cout<

限制:

  • 1 <= s1.length, s2.length <= 1000
  • s1, s2 只包含 'x''y'

你可能感兴趣的:(力扣每日一题,leetcode,c++,每日一题)