问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3973 访问。

给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。

输入: A = "ab", B = "ba"

输出: true

输入: A = "ab", B = "ab"

输出: false

输入: A = "aa", B = "aa"

输出: true

输入: A = "aaaaaaabc", B = "aaaaaaacb"

输出: true

输入: A = "", B = "aa"

输出: false

提示:

  • 0 <= A.length <= 20000
  • 0 <= B.length <= 20000
  • A 和 B 仅由小写字母构成。

Given two strings A and B of lowercase letters, return true if and only if we can swap two letters in A so that the result equals B.

Input: A = "ab", B = "ba"

Output: true

Input: A = "ab", B = "ab"

Output: false

Input: A = "aa", B = "aa"

Output: true

Input: A = "aaaaaaabc", B = "aaaaaaacb"

Output: true

Input: A = "", B = "aa"

Output: false

Note:

  • 0 <= A.length <= 20000
  • 0 <= B.length <= 20000
  • A and B consist only of lowercase letters.

示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3973 访问。

public class Program {public static void Main(string[] args) {var A = "aaaaaaabc";var B = "aaaaaaacb";var res = BuddyStrings(A, B);Console.WriteLine(res);A = "ab";B = "ab";res = BuddyStrings2(A, B);Console.WriteLine(res);Console.ReadKey();}private static bool BuddyStrings(string A, string B) {//暴力求解,LeetCode超时未ACif(A.Length != B.Length) return false;var sb = new StringBuilder(A);//逐一测试所有字符for(var i = 0; i < A.Length; i++) {for(var j = i + 1; j < A.Length; j++) {var swap = sb[i];sb[i] = sb[j];sb[j] = swap;//相同时,返回 trueif(sb.ToString() == B) return true;//重置 sbsb = new StringBuilder(A);}}//返回 falsereturn false;}private static bool BuddyStrings2(string A, string B) {//长度不同时,直接返回 falseif(A.Length != B.Length) return false;//用 list 统计相同位置处字符不同的索引值var list = new List<int>();for(var i = 0; i < A.Length; i++) {if(A[i] != B[i]) list.Add(i);if(list.Count > 2) break;}//若所有位置字符相//那么若原字符串包含相同的字符则为亲密字符串if(list.Count == 0) {if(ContainsSameLetter(A)) return true;}//不等于 2,则没有办法通过交换获得相同结果if(list.Count != 2) return false;//用 sb 交换 2 个值var sb = new StringBuilder(A);var swap = sb[list[0]];sb[list[0]] = sb[list[1]];sb[list[1]] = swap;//相同时,返回 truereturn sb.ToString() == B;}private static bool ContainsSameLetter(string A) {//哈希法判定是否存在相同字符var dic = new Dictionary<char, int>();foreach(var c in A) {if(dic.ContainsKey(c)) {dic[c]++;} else {dic[c] = 1;}}//包含2个及以上的数量即存在相同字符return dic.Where(c => c.Value >= 2).Count() >= 1;}}

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3973 访问。

True
False

分析:

显而易见,BuddyStrings 的时间复杂度为:  ,BuddyStrings2 的时间复杂度为:  。

C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)相关推荐

  1. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...

  2. LeetCode刷题第8天字符串系列之《378字符串中的第一个唯一字符》

    LeetCode 378字符串中的第一个唯一字符 题目描述 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 提示:你可以假定该字符串只包含小写字母. 示例 输入 ...

  3. C#LeetCode刷题之#557-反转字符串中的单词 III(Reverse Words in a String III)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3955 访问. 给定一个字符串,你需要反转字符串中每个单词的字符顺 ...

  4. C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3935 访问. 编写一个函数,以字符串作为输入,反转该字符串中的元 ...

  5. C#LeetCode刷题之#344-反转字符串​​​​​​​(Reverse String)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3933 访问. 编写一个函数,其作用是将输入的字符串反转过来. 输 ...

  6. C#LeetCode刷题之#541-反转字符串 II(Reverse String II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3951 访问. 给定一个字符串和一个整数 k,你需要对从字符串开头 ...

  7. C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3943 访问. 给定一组字符,使用原地算法将其压缩. 压缩后的长度 ...

  8. [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词

    题目: 给定两个字符串串 s 和 t,编写⼀一个函数来判断 t 是否是 s 的字⺟母 异位词. 说明: 你可以假设字符串串只包含⼩小写字⺟母. 示例: 示例 1 输入: s = "anagr ...

  9. LeetCode刷题实战(43):Multiply Strings

    题目描述: 43 Multiply Strings 28.7% Medium Given two non-negative integers num1 and num2 represented as ...

最新文章

  1. Linux ssh/scp/docker学习
  2. android view爆炸效果,Android 显示view的粒子爆炸/绽放效果
  3. Android模仿京东登录注册,Android:布局实例之模仿京东登录界面
  4. xshell安装与配置,Xftp(不能连接虚拟机解决方法,sudo apt-get install openssh-server,服务没开怎么传输数据?)(虚拟机和windows之间自由复制)
  5. php中的static
  6. 最值反演[PKUWC2018][loj2542]随机游走
  7. R语言-Kindle特价书爬榜示例 输出HTML小技巧
  8. 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
  9. 坎宁安法则又称“卑鄙的人”
  10. python基础知识学习笔记(1)
  11. opencv-api getRotationMatrix2D
  12. java 相同字符不连续_Java中字符串中连续相同字符去重方法
  13. 数据库操作(不断更新)
  14. 【eoeAndroid特刊】第一期到第十八期
  15. 永中office属于职称计算机吗,职称计算机考核永中Office辅导之文字处理.docx
  16. 什么是全栈工程师 摘自360
  17. pimple学习(1)pimple的使用
  18. 在word文档中从第3页开始编页码的方法
  19. java httpclient cdn_Java 11`HttpClient`下载但不是吗? (负内容长度)
  20. 电脑使用技巧(按键失灵的几种解决方法)

热门文章

  1. 【转载】关联分析中的支持度、置信度和提升度
  2. 【今日CS 视觉论文速览】20 Dec 2018
  3. Kubernetes-NodePort(十七)
  4. 案例 TreeView动态控制节点 c# 1614264758
  5. javascript 西瓜一期 10 十进制数数的详细进位解析
  6. 阿里云 快照恢复的操作过程
  7. 草稿 前端开发 代码的编写习惯 缩进的意义 HTML的格式
  8. 2020-爬虫技术ftx
  9. 技术讲坛新模式,积分制
  10. 阿里云MVP陈磊:数字化转型驱动业务创新