首页 > 其他分享 >1790. 仅执行一次字符串交换能否使两个字符串相等

1790. 仅执行一次字符串交换能否使两个字符串相等

时间:2022-10-11 23:12:43浏览次数:50  
标签:相等 两个 s2 s1 1790 交换 字符串

题目

给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。

如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

示例 1:

输入:s1 = "bank", s2 = "kanb"
输出:true
解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"

示例 2:

输入:s1 = "attack", s2 = "defend"
输出:false
解释:一次字符串交换无法使两个字符串相等

难度:简单

题解

题目要求其中一个字符串最多一次字符交换使得两个字符串相等,意味着两个字符串中最多只存在两个位置i,j处不相等,此时判断i,j处字符是否相等。

1、如果两个字符串相等,则不需要进行交换

2、如果两个字符串不相等,定义一个diff变量来记录有几处不同,当diff2时,判断是 s1[i]s2[j] 和 s1[j]==s2[i]是否相等,如果能则表示可以通过一次交换使其相等。

bool areAlmostEqual(char * s1, char * s2){
    int len=strlen(s1);
    int diff=0,idex1=0,idex2=0;
    for(int i=0;i<len;i++){
        if(s1[i]!=s2[i]){
            diff++;
            if(idex1==0) idex1=i;
            if(idex2==0 && idex1!=i) idex2=i;
            
        }
    }
    if(diff==0) return true;
   if(diff==2 && s1[idex1]==s2[idex2] && s1[idex2]==s2[idex1])
        return true;
     return false;
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(C)

标签:相等,两个,s2,s1,1790,交换,字符串
From: https://www.cnblogs.com/lazykora/p/16782962.html

相关文章

  • MySQL动态执行字符串
    需求表中存有按天维度字符串表达式字段,需要取出,然后计算出字符串表达式的结果,最后得到一个结果集,并且保留结果例:表达式字段值为value>1,需要先replace掉value为实际......
  • 【洛谷】P8256 [NOI Online 2022 入门组] 字符串(dp)
    原题链接题意给定两个由0,1,-组成的字符串\(S\),\(T\),以及一个空串\(R\)。\(S\)的长度为\(n\)。现在要进行\(n\)次操作,每一次操作取出\(S\)的第一个字符\(c\)......
  • 接口返回JSON字符串压缩和解压
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.IO;usingSystem.IO.Compression;namespaceCSIBrowser.Client.Util{......
  • JS_0066:date 相关方法 获取时间字符串 计算时间差
    1,获取时间字符串varnowdatestr=newDate().toLocaleDateString();获取时间格式如:2022/10/10 2,计算时间差$nowdate=date('Y-m-dH:i:s',time());$ret['leftday......
  • leetcode-394.字符串解码
    394.字符串解码publicStringdecodeString(Strings){Stack<Character>stack=newStack<>();for(charc:s.toCharArray()){if(c......
  • 【C语言_21】处理字符串的函数!
    前言使用以下函数均需要添加头文件#include<string.h>1.strlen函数获取字符串的长度从第一个字符开始直到遇见\0,返回字符串的长度size_tstrlen(constchar*str);//size_t......
  • 字符串容器
    字符串是字符的容器,一个字符串可以存放任意数量的字符和其它容器如:列表、元组一样,字符串也可以通过下标进行访问从前向后,下标从0开始从后向前,下标从-1开始同元......
  • 1790. 仅执行一次字符串交换能否使两个字符串相等
    1790.仅执行一次字符串交换能否使两个字符串相等给你长度相等的两个字符串s1和s2。一次字符串交换操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这......
  • SQL 修改语句: 字符串首字母大写 All In One
    SQL修改语句:字符串首字母大写AllInOneSQL用户名第一个字符转换成大写的,其余字符都转换成小写的demo字符串拼接https://leetcode.cn/problems/fix-names-i......
  • [51nod 1393] 0和1相等串 前缀和
    #include<cstdio>#include<cstring>#definemaxn1000050#definemax(a,b)((a)>(b)?(a):(b))usingnamespacestd;intl[maxn<<1];//即maxn*2inta[maxn];chars......