首页 > 其他分享 >1247. 交换字符使得字符串相同

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

时间:2023-04-08 18:11:07浏览次数:36  
标签:字符 cnt 相同 s1 交换 1247 字符串

题目链接:[1247. 交换字符使得字符串相同]

方法:找规律

解题思路

由于只能两个字符串之间交换字符,单个字符串内不允许交换,因此如果只有一个字符对不相同,那么一定无法通过交换变为相同字符串,同理当不相同的字符对为奇数时,也无法通过交换变为相同字符。
当不相同的字符对数为偶数时,现在考虑以下几种情况:
无标题.png
其中对于情况1和2,两个不同的字符对可以通过1次替换变得相同,而情况3需要通过另一对字符对作为媒介才能替换相同,需要2次,所以优先情况1和2进行替换,当情况1和2替换之后,若只剩下1个字符对不同,则返回-1,若剩下一对情况3的字符对,此时替换次数+2即可。

代码

class Solution {
public:
    int minimumSwap(string s1, string s2) {
        int cnt['z']{}; // cnt['x'] 表示不相等的字符对中属于s1的字符为x的数量
        for (int i = 0; i < s1.length(); i ++ ) {
            if (s1[i] != s2[i]) cnt[s1[i]] ++ ;
        }
        if (cnt['x'] % 2 + cnt['y'] % 2 == 1) return -1;
        return cnt['x'] / 2 + cnt['y'] / 2 + cnt['x'] % 2 + cnt['y'] % 2;
    }
};

复杂度分析

时间复杂度:\(O(n),n = s.length()\);
空间复杂度:\(O(1)\)。

标签:字符,cnt,相同,s1,交换,1247,字符串
From: https://www.cnblogs.com/lxycoding/p/17298942.html

相关文章

  • 『0012』 - Solidity Types - 字符串(String Literals)
    作者:黎跃春,案例字符串可以通过""或者''来表示字符串的值,Solidity中的string字符串不像C语言一样以\0结束,比如我的微信号liyc1215这个字符串的长度就为我们所看见的字母的个数,它的长度为8。pragmasolidity^0.4.4;contractStringLiterals{string_name;//状态变量......
  • Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示
    原文:http://inventwithpython.com/beyond/chapter11.html源代码中的注释和文档可能和代码一样重要。原因是软件是永远不会完成的;无论是添加新功能还是修复错误,您总是需要做出改变。但是你不能改变代码,除非你理解它,所以保持它可读是很重要的。正如计算机科学家哈罗德·艾贝尔森......
  • HJ71_字符串通配符_多维递归
    思路:1、对比字符最后一个,对比字符倒数第二个,一致对比到最后一个,如此递归。2、该题符合多维递归,回溯判断。遇到“*”通配符时,列举三种不同参数传递的递归情况,分叉递归以达到穷举的效果。(回溯)3、结束条件:两字符串均为空,不计算“*”字符具体,如代码所示。#*只能匹配数字或字母0个......
  • 判断字符串是不是正则表达式
    :rules="[{required:true,trigger:'blur',validator:this.checkCanonical},]"checkCanonical(rule,value,callback){if(value){letisReg=truetry{isReg=eval(......
  • JavaScript 有效的字符串方法
    目录获得字符串的长度用处在字符串中查找子字符串找到字符串的位置判断是否包含特定子字符串截取子字符串的方法转换大小写替换字符串的某部分本文内容部分截取自该网站,不同部分则为本人笔记。获得字符串的长度letbrowserType='mozilla';browserType.length;用处检......
  • 冷知识:预处理字符串操作符
    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/Xr2pFCJ4j0DZYo2PO6-KQg当年学习C语言的第一门课就提到过标记(Token)的概念,不过,相信在多年之后你再次听到这个术语时会一脸懵逼,比如我。因此特地翻了翻资料,整理下来这些笔记......
  • vs调试“字符串中字符无效”处理办法
    在使用VS2019调试代码时,查看变量值时,utf8格式字符串不能正常显示,需要在变量名后手动添加",s8",就能正常查看字符啦。总结如下:,s8:将字符串转成unicode展示,数字将变量拆分为数组显示,数字是要显示多少位,此法对constchar*这类原始字符串非常有用,x16进制查看,hr查看Win......
  • C#判断字符串是否是有效的XML格式数据
    说明在try-catch语句块中,创建XmlDocument对象,并使用LoadXml方法加载xml字符串。如果没有异常,则说明xml字符串是有效的,返回true,反之为false。代码实现///<summary>///Xml字符串格式验证///</summary>///<paramname="xmlString">Xm......
  • KMP 字符串
    KMP题目描述给定一个字符串\(S\),以及一个模式串\(P\),所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串\(P\)在字符串\(S\)中多次作为子串出现。求出模式串\(P\)在字符串\(S\)中所有出现的位置的起始下标。输入第一行输入整数\(N\),表示字符串\(P\)的长度......
  • 1234. 替换子串得到平衡字符串
    题目链接:1234.替换子串得到平衡字符串方法:同向双指针解题思路若可以通过「替换一个子串」的方式,使原字符串s变成一个「平衡字符串」,则说明子串外任意字符的数量\(s≤n/4\),否则一旦有一个字符的数量大于\(n/4\),那么不论如何替换,必定有另一个字符的数量小于\(n/4......