C#LeetCode刷题之#859-亲密字符串(Buddy Strings)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)相关推荐
- C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...
- LeetCode刷题第8天字符串系列之《378字符串中的第一个唯一字符》
LeetCode 378字符串中的第一个唯一字符 题目描述 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 提示:你可以假定该字符串只包含小写字母. 示例 输入 ...
- C#LeetCode刷题之#557-反转字符串中的单词 III(Reverse Words in a String III)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3955 访问. 给定一个字符串,你需要反转字符串中每个单词的字符顺 ...
- C#LeetCode刷题之#345-反转字符串中的元音字母(Reverse Vowels of a String)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3935 访问. 编写一个函数,以字符串作为输入,反转该字符串中的元 ...
- C#LeetCode刷题之#344-反转字符串(Reverse String)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3933 访问. 编写一个函数,其作用是将输入的字符串反转过来. 输 ...
- C#LeetCode刷题之#541-反转字符串 II(Reverse String II)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3951 访问. 给定一个字符串和一个整数 k,你需要对从字符串开头 ...
- C#LeetCode刷题之#443-压缩字符串(String Compression)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3943 访问. 给定一组字符,使用原地算法将其压缩. 压缩后的长度 ...
- [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词
题目: 给定两个字符串串 s 和 t,编写⼀一个函数来判断 t 是否是 s 的字⺟母 异位词. 说明: 你可以假设字符串串只包含⼩小写字⺟母. 示例: 示例 1 输入: s = "anagr ...
- LeetCode刷题实战(43):Multiply Strings
题目描述: 43 Multiply Strings 28.7% Medium Given two non-negative integers num1 and num2 represented as ...
最新文章
- Linux ssh/scp/docker学习
- android view爆炸效果,Android 显示view的粒子爆炸/绽放效果
- Android模仿京东登录注册,Android:布局实例之模仿京东登录界面
- xshell安装与配置,Xftp(不能连接虚拟机解决方法,sudo apt-get install openssh-server,服务没开怎么传输数据?)(虚拟机和windows之间自由复制)
- php中的static
- 最值反演[PKUWC2018][loj2542]随机游走
- R语言-Kindle特价书爬榜示例 输出HTML小技巧
- 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
- 坎宁安法则又称“卑鄙的人”
- python基础知识学习笔记(1)
- opencv-api getRotationMatrix2D
- java 相同字符不连续_Java中字符串中连续相同字符去重方法
- 数据库操作(不断更新)
- 【eoeAndroid特刊】第一期到第十八期
- 永中office属于职称计算机吗,职称计算机考核永中Office辅导之文字处理.docx
- 什么是全栈工程师 摘自360
- pimple学习(1)pimple的使用
- 在word文档中从第3页开始编页码的方法
- java httpclient cdn_Java 11`HttpClient`下载但不是吗? (负内容长度)
- 电脑使用技巧(按键失灵的几种解决方法)