Leetcode.1247 交换字符使得字符串相同

news2024/9/30 1:39:26

题目链接

Leetcode.1247 交换字符使得字符串相同 Rating : 1597

题目描述

有两个长度相同的字符串 s1s2,且它们其中 只含有 字符 "x""y",你需要通过「交换字符」的方式使这两个字符串相同。

每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。

交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i]s2[j],但不能交换 s1[i]s1[j]

最后,请你返回使 s1s2相同的最小交换次数,如果没有方法能够使得这两个字符串相同,则返回 -1

示例 1:

输入:s1 = “xx”, s2 = “yy”
输出:1
解释:
交换 s1[0] 和 s2[1],得到 s1 = “yx”,s2 = “yx”。

示例 2:

输入:s1 = “xy”, s2 = “yx”
输出:2
解释:
交换 s1[0] 和 s2[0],得到 s1 = “yy”,s2 = “xx” 。
交换 s1[0] 和 s2[1],得到 s1 = “xy”,s2 = “xy” 。
注意,你不能交换 s1[0] 和 s1[1] 使得 s1 变成 “yx”,因为我们只能交换属于两个不同字符串的字符。

示例 3:

输入:s1 = “xx”, s2 = “xy”
输出:-1

示例 4:

输入:s1 = “xxyyxyxyxx”, s2 = “xyyxyxxxyx”
输出:4

提示:

  • 1 < = s 1. l e n g t h , s 2. l e n g t h < = 1000 1 <= s1.length, s2.length <= 1000 1<=s1.length,s2.length<=1000
  • s1, s2只包含 'x''y'

分析:

我们只需要讨论 s1[i] != s2[i],即不匹配的情况。

我们用 k表示不能匹配的数量。

我们发现当 k是奇数时,无论怎么也不能让 s1 == s2

在这里插入图片描述
只有当 k是偶数时,才能通过交换让 s1 == s2

示例已经给出了 交换 的两种形式。

在这里插入图片描述
所以为了让操作次数最少,我们应该尽量用第一种交换方式。

xy的数量都是偶数时:

在这里插入图片描述
xy的数量都是奇数时:

在这里插入图片描述

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    int minimumSwap(string s1, string s2) {
        int n = s1.size();

        unordered_map<char,int> cnt;
        int k = 0;
        for(int i = 0;i < n;i++){
            if(s1[i] != s2[i]){
                k++;
                cnt[s1[i]]++;
            }
        }

        if(k % 2) return -1;

        return k / 2 + cnt['x'] % 2;
    }
};

Java代码:

class Solution {
    public int minimumSwap(String s1, String s2) {
        int n = s1.length();

        int[] cnt = new int[2];
        int k = 0;
        for(int i = 0;i < n;i++){
            if(s1.charAt(i) != s2.charAt(i)){
                k++;
                //'x' - 'x'= 0 , 'y' - 'x' = 1
                cnt[s1.charAt(i) - 'x']++;
            }
        }

        if(k % 2 == 1) return -1;

        return k/2 + cnt[0] % 2;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++设计模式(21)——中介者模式

亦称&#xff1a; 调解人、控制器、Intermediary、Controller、Mediator 意图 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建…

蓄水池抽样算法

蓄水池抽样&#xff0c;也称水塘抽样&#xff0c;是随机抽样算法的一种。基本抽样问题有一批数据&#xff08;假设为一个数组&#xff0c;可以逐个读取&#xff09;&#xff0c;要从中随机抽取一个数字&#xff0c;求抽得的数字下标。常规的抽样方法是&#xff0c;先读取所有的…

Spring IoC 和 Spring AOP

Spring IoC Ioc&#xff08;Inversion of control&#xff1a;即控制反转&#xff09;是一种设计思想&#xff0c;而不是一种具体的技术实现。IoC的思想就是将原本在程序中手动创建对象的控制权交给Spring框架来管理。 不过&#xff0c; IoC 并非 Spring 特有&#xff0c;在其…

蓝桥杯C/C++VIP试题每日一练之龟兔赛跑预测

&#x1f49b;作者主页&#xff1a;静Yu &#x1f9e1;简介&#xff1a;CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家&#xff0c;前端知识交流社区创建者 &#x1f49b;社区地址&#xff1a;前端知识交流社区 &#x1f9e1;博主的个人博客&#xff1a;静Yu的个人博客…

python的类如何使用?兔c同学一篇关于python类的博文概述

本章内容如目录 所示&#xff1a; 文章目录1. 创建和使用类1.1 创建第一个python 类1.2 版本差异1.3 根据类创建实例1. 访问属性2. 调用方法3. 创建多个实例2. 使用类和实例2.1 给属性指定默认值2.2 修改属性的值3. 继承3.1 子类的 __init __()3.2 给子类定义属性和方法3.3 重写…

《如何有效阅读》藤原和博 读书笔记

感想 1、整本书内容零散&#xff1a; 主旨是如何有效阅读&#xff0c;但是阅读方法不成系统&#xff0c;更像是零散的想法&#xff0c;或者说是作者想到什么就写什么。第一遍读完以后&#xff0c;大脑里没有什么整体思路&#xff0c;觉得作者说的有道理&#xff0c;但是没有实…

Django 模型层及ORM介绍二

数据库迁移文件混乱的解决方法 数据库中django_migrations表记录了migrate的‘全过程’&#xff0c;项目各应用中的migrate文件与之对应&#xff0c;否则migrate会报错解决方案&#xff1a; 1、删除所有migrations里所有的000?_xxxx.py&#xff08;__init__.py除外&#xff09…

【模拟集成电路】环路滤波器(LPF)设计

环路滤波器 LPF 设计 前言环路滤波器设计仿真结果各部分链接链接&#xff1a;前言 本文主要内容是对环路滤波器 模块设计设计进行阐述&#xff0c;LPF在电荷泵频率综合器中&#xff0c;主要作用是进行滤波&#xff0c;消除毛刺&#xff0c;因此一个简单的RC就可以起到很好的效果…

软件设计的“SOLID”五大原则

一、单一职责 1、定义 单一职责原则&#xff08;single Responsibility Principle,SRP&#xff09;规定&#xff0c;每一个软件单元&#xff0c;其中包括组件、类和函数&#xff0c;应该只有一个单一且明确定义的职责。 2、特点 一个类应该仅有一个引起它变化的原因&#x…

JavaScript HTML DOM 改变 HTML

文章目录JavaScript HTML DOM 改变 HTML改变 HTML 输出流改变 HTML 内容改变 HTML 属性JavaScript HTML DOM 改变 HTML HTML DOM 允许 JavaScript 改变 HTML 元素的内容。 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容&#xff1a; 今天的日期是&#xff1a; Thu …

JDBC-API详解、SQL注入演示、连接池

文章目录JDBC1&#xff0c;JDBC概述1.1 JDBC概念1.2 JDBC本质1.3 JDBC好处2&#xff0c;JDBC快速入门2.1 编写代码步骤2.2 具体操作3&#xff0c;JDBC API详解3.1 DriverManager3.2 Connection &#xff08;事务归我管&#xff09;3.2.1 获取执行对象3.2.2 事务管理3.3 Stateme…

SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束

文章目录约束约束介绍和分类非空约束唯一约束主键约束默认约束案例练习外键约束约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则&#xff0c;用于限制加入表的数据 约束的存在保证了数据库中数据的正确性、有效性和完整性 约束的分类如下: 约束名称描述关键字非…

代码随想录【Day25】| 216. 组合总和 III、17. 电话号码的字母组合

216. 组合总和 III 题目链接 题目描述&#xff1a; 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输…

从中国文化看面试挑人标准

文章目录标准一、面相1. 1 四白眼1.2 浓眉二、讲话2.1 言多与气虚总结本文结合中国面相&#xff0c;是个概率性问题&#xff0c;对于个体无效。 标准 正直&#xff0c;三观正&#xff0c;沟通好&#xff0c;技术。从概率上讲&#xff1a; 正直且三观正的人----有恒心&#x…

Python带你制作一个属于自己的多功能音乐播放器

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 就是用Python做一个简易的音乐播放器&#xff0c;废话不多说&#xff0c;咱们直接开干 当然&#xff0c;今天做这个肯定不是最简单的&#xff0c;最简单的音乐播放器&#xff0c;9行代码足以 完整源码等直接在文末名片领…

剑指 Offer 08. 二叉树的下一个结点

摘要 二叉树的下一个结点_牛客题霸_牛客网 给定一个二叉树其中的一个结点&#xff0c;请找出中序遍历顺序的下一个结点并且返回。注意&#xff0c;树中的结点不仅包含左右子结点&#xff0c;同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节…

【SpringBoot】简单的文件上传和文件下载以及图片回显

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&#…

k8s全解

目录说明Kubernetes介绍应用部署方式演变kubernetes简介kubernetes组件kubernetes概念kubernetes集群环境搭建安装方式kubeadm二进制包集群类型安装要求最终目标准备环境环境初始化服务部署kubeadm中的命令(一般用不着)资源管理YAML语言介绍资源管理方式命令式对象管理kubectl命…

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

什么是分布式锁?几种分布式锁分别是怎么实现的?

一、什么是分布式锁&#xff1a; 1、什么是分布式锁&#xff1a; 分布式锁&#xff0c;即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题&#xff0c;而分布式锁&#xff0c;就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&am…