仅执行一次字符串交换能否使两个字符串相等
发布日期:2021-05-08 00:00:37 浏览次数:17 分类:精选文章

本文共 931 字,大约阅读时间需要 3 分钟。

原题指路

题目描述

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

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

解题思路

图片2.png

满足题目要求的情况只有以下两种:

  1. s1s2完全相同;
  2. s1s2只有两个对应位置的元素不同。

所以循环遍历一次字符串进行判断即可。

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

空间复杂度: O ( 1 ) O(1) O(1)

代码

class Solution {       public:        bool areAlmostEqual(string s1, string s2)         {               int cnt = 0, index[3];            int len = s1.length();            for(int i = 0; i < len; i++)//循环找出字符串中不同的元素并记录下标            {                   if(s1[i] != s2[i])                {                       index[cnt] = i;                    cnt++;                }                if(cnt > 2)//计数超过2就跳出                    break;            }            //分情况讨论            if(!cnt)                return true;            if(cnt==2 && s1[index[0]] == s2[index[1]] && s1[index[1]] == s2[index[0]])                return true;            return false;        }};
上一篇:最大升序子数组和
下一篇:字符串中第二大的数字

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月22日 18时47分01秒