leetcode324场周赛

发布时间 2023-11-20 11:53:46作者: 桂洛克船长

一、使三个字符串相等

给你三个字符串 s1s2s3。 你可以根据需要对这三个字符串执行以下操作 任意次数

在每次操作中,你可以选择其中一个长度至少为 2 的字符串 并删除其 最右位置上 的字符。

如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的 最小 操作次数;否则,返回 -1

示例 1:

输入:s1 = "abc",s2 = "abb",s3 = "ab"
输出:2
解释:对 s1 和 s2 进行一次操作后,可以得到三个相等的字符串。
可以证明,不可能用少于两次操作使它们相等。

示例 2:

输入:s1 = "dac",s2 = "bac",s3 = "cac"
输出:-1
解释:因为 s1 和 s2 的最左位置上的字母不相等,所以无论进行多少次操作,它们都不可能相等。因此答案是 -1 。

提示:

  • 1 <= s1.length, s2.length, s3.length <= 100
  • s1s2s3 仅由小写英文字母组成。

第一题老规矩就是个暴力模拟。上屎山:

class Solution {
public:
    int findMinimumOperations(string s1, string s2, string s3) {
        int ans = 0;
        
        if(s1==s2 && s2 ==s3)
        {
            return ans;
        }
        int a = s1.size();
        int b = s2.size();
        int c = s3.size();
        
        int temp = min(a,min(b,c));
        
        if(s1[0] != s2[0] || s2[0]!=s3[0])
        {
            return -1;
        }
        
        
        for(int i=0;i<temp;i++)   //相同几位
        {
            if(s1[i] == s2[i] && s2[i]==s3[i])   
            {
                ans++;
            }
            else
            {
                break;
            }
        }
        int x=0;
        x+=a-ans;
        x+=b-ans;
        x+=c-ans;
        return x;
    }
};

二、区分黑球与白球

桌子上有 n 个球,每个球的颜色不是黑色,就是白色。

给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 10 分别代表黑色和白色的球。

在每一步中,你可以选择两个相邻的球并交换它们。

返回「将所有黑色球都移到右侧,所有白色球都移到左侧所需的 最小步数」。

示例 1:

输入:s = "101"
输出:1
解释:我们可以按以下方式将所有黑色球移到右侧:
- 交换 s[0] 和 s[1],s = "011"。
最开始,1 没有都在右侧,需要至少 1 步将其移到右侧。

示例 2:

输入:s = "100"
输出:2
解释:我们可以按以下方式将所有黑色球移到右侧:
- 交换 s[0] 和 s[1],s = "010"。
- 交换 s[1] 和 s[2],s = "001"。
可以证明所需的最小步数为 2 。

示例 3:

输入:s = "0111"
输出:0
解释:所有黑色球都已经在右侧。

提示:

  • 1 <= n == s.length <= 105
  • s[i] 不是 '0',就是 '1'

脑子真的笨,这是一个思维题,只要累加每个0之前有几个一即可。例子:

image-20231120114033082

详细分析:

image-20231120114432767

因此这题脑子转过来就简单了,代码如下:

class Solution {
public:
    long long minimumSteps(string s) {
        long long ans = 0;
        int cnt =0;
        for(char c:s)
        {
            if(c == '1')
            {
                cnt++;
            }
            else
            {
                ans+=cnt;
            }
        }

        return ans;
    }
};

两题打卡下班。