Re: [闲聊] 每日LeetCode

楼主: Rushia (みけねこ的鼻屎)   2022-12-02 16:05:56
1657. Determine if Two Strings Are Close
给你两个字串s1和s2判断他们是不是"close",若字串s1可以透过下列两种操作转为s2则
他们为"close",返回true,否则false。
1.交换s1的任意字符位置,例如: aab -> aba
2.将s1的某一种字符和另一个s1中的字符全部替换
例如: aac -> caa(全部a变c且c变a)
Example:
Input: word1 = "cabbba", word2 = "abbccc"
Output: true
Explanation: You can attain word2 from word1 in 3 operations.
Apply Operation 1: "cabbba" -> "caabbb"
Apply Operation 2: "caabbb" -> "baaccc"
Apply Operation 2: "baaccc" -> "abbccc"
思路:
1.如果s1和s2长度不一样一定不是close,例如:a aa
2.如果s1有s2没有的字符或s2没有s1有的字符他们一定不是close,例如:aab cdd
3.因为我们可以交换字符的任意位置,所以我们只需要关注s1和s2的字符数量即可,
先统计s1和s2的每个单字之数量。
4.因为操作2的关系我们可以交换字符的数量,例如:aaabb -> bbaaa
所以我们将字符的数量排序并检查s1和s2的数量是否可以两两对应,这样任意字符
都可以透过操作2获得(因为2的检查,s1有的字符s2都会有反之亦然)。
cabbba = {2, 3, 1} => {1, 2, 3}
abbccc = {1, 2, 3} => {1, 2, 3}
JavaCode:
作者: pandix (面包屌)   2022-12-02 16:18:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com