首页 > 其他分享 >【每日一题】LeetCode 859. 亲密字符串

【每日一题】LeetCode 859. 亲密字符串

时间:2023-06-07 14:08:19浏览次数:38  
标签:下标 cnt false 交换 859 字符串 return LeetCode size


题目描述

给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。

交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。

例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。

代码

class Solution {
public:
    bool buddyStrings(string a, string b) {
        if(a.size() != b.size())    return false;
        if(a==b)
        {
            unordered_map<char, int> cnt;
            for(auto c:a)
                if(++cnt[c]>1)
                    return true;
            return false;
        }
        vector<int> q;
        for(int i=0;i<a.size();i++)
            if(a[i]!=b[i])
                q.push_back(i);
        if(q.size()!=2) return false;
        int x=q[0], y=q[1];
        if(a[x]==b[y] && a[y]==b[x])    return true;
        return false;
    }
};


标签:下标,cnt,false,交换,859,字符串,return,LeetCode,size
From: https://blog.51cto.com/u_15567308/6431246

相关文章

  • 【每日一题】LeetCode 390. 消除游戏
    题目列表arr由在范围[1,n]中的所有整数组成,并按严格递增排序。请你对arr应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右......
  • 【每日一题】LeetCode 786. 第K个最小的素数分数(待补全题解思路)
    题目给你一个按递增顺序排序的数组arr和一个整数k。数组arr由1和若干素数组成,且其中所有整数互不相同。对于每对满足0<i<j<arr.length的i和j,可以得到分数arr[i]/arr[j]。那么第k个最小的分数是多少呢?以长度为2的整数数组返回你的答案,这里answer......
  • 【每日一题】LeetCode 438.找到字符串中所有字母异位词
    题目给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。输入:s=“cbaebabacd”,p=“abc”输出:[0,6]解释:起始索引等于0的子串是“cba”,它是“abc”......
  • 【每日一题】LeetCode 458. 可怜的小猪(思路清奇)
    题目有buckets桶液体,其中正好有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有minutesToTest分钟时间来确定哪桶液体是有毒的。喂猪的规则如下:选择若干活猪进行喂养可以允许......
  • 【每日一题】LeetCode 1576.替换所有的问号
    题目给你一个仅包含小写英文字母和‘?’字符的字符串s,请你将所有的‘?’转换为若干小写字母,使最终的字符串不包含任何连续重复的字符。注意:你不能修改非‘?’字符。题目测试用例保证除‘?’字符之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字......
  • 【每日一题】LeetCode 1185.一周中的第几天
    题目给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{“Sunday”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”}。示例输入:day=31,......
  • LeetCode 1790.仅执行一次字符串交换能否使两个字符串相等
    LeetCode1790.仅执行一次字符串交换能否使两个字符串相等思路暴力模拟,根据题目思路直接写代码即可,依次遍历字符串的每一位,如果相等则继续,如果不相同则分别储存在记录量flag1,flag2中,如果不同的位置超过两个或者只有一个则返回false,如果不存在不同位置或者不同的位置相同就返回tru......
  • 【每日一题】LeetCode 913.猫和老鼠(hard题)
    题目两位玩家分别扮演猫和老鼠,在一张无向图上进行游戏,两人轮流行动。图的形式是:graph[a]是一个列表,由满足ab是图中的一条边的所有节点b组成。老鼠从节点1开始,第一个出发;猫从节点2开始,第二个出发。在节点0处有一个洞。在每个玩家的行动中,他们必须沿着图中与所在当前......
  • LeetCode 481.神奇字符串
    LeetCode481.神奇字符串本题目应该说难在读题,根据题目描述的意思,s作为一个神奇字符串,他的每一组数都是根据前面的数去判定的,以开头的122之后为例,122之的末尾为2,而s的规则是1和2交替出现,所以后面应当跟着"1",而这一组"1"的数量则由其前面的"2"来决定,所以这一组有两个"1",同理,在这后面......
  • LeetCode 9.回文数
    LeetCode9.回文数思路分两种情况。如果值为负数,则当前数肯定不是回文数如果值为正数,则将其数值反转后与原数值比较,如果相同则是回文数代码classSolution{publicbooleanisPalindrome(intx){if(x<0)returnfalse;inttmp=0,num=x;while(num......