ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode 859. Buddy Strings

2022-08-28 15:30:41  阅读:242  来源: 互联网

标签:return goal charAt get Strings swap diff LeetCode Buddy


原题链接在这里:https://leetcode.com/problems/buddy-strings/

题目:

Given two strings s and goal, return true if you can swap two letters in s so the result is equal to goal, otherwise, return false.

Swapping letters is defined as taking two indices i and j (0-indexed) such that i != j and swapping the characters at s[i] and s[j].

  • For example, swapping at indices 0 and 2 in "abcd" results in "cbad".

Example 1:

Input: s = "ab", goal = "ba"
Output: true
Explanation: You can swap s[0] = 'a' and s[1] = 'b' to get "ba", which is equal to goal.

Example 2:

Input: s = "ab", goal = "ab"
Output: false
Explanation: The only letters you can swap are s[0] = 'a' and s[1] = 'b', which results in "ba" != goal.

Example 3:

Input: s = "aa", goal = "aa"
Output: true
Explanation: You can swap s[0] = 'a' and s[1] = 'a' to get "aa", which is equal to goal.

Constraints:

  • 1 <= s.length, goal.length <= 2 * 104
  • s and goal consist of lowercase letters.

题解:

If length is different, then it can't bu buddy strings, return false.

If s and goal are equal, then at least there should be duplciate chars to be swapped.

Otherwise, there could be only two difference and corresponding place could be swapped.

Time Complexity: O(m). m = s.length().

Space: O(m).

AC Java:

 1 class Solution {
 2     public boolean buddyStrings(String s, String goal) {
 3         int m = s.length();
 4         int n = goal.length();
 5         if(m != n){
 6             return false;
 7         }
 8         
 9         if(s.equals(goal)){
10             HashSet<Character> hs = new HashSet<>();
11             for(char c : s.toCharArray()){
12                 hs.add(c);
13             }
14             
15             return hs.size() != m;
16         }
17         
18         List<Integer> diff = new ArrayList<>();
19         for(int i = 0; i < m; i++){
20             if(s.charAt(i) != goal.charAt(i)){
21                 diff.add(i);
22             }
23         }
24         
25         return diff.size() == 2 && s.charAt(diff.get(0)) == goal.charAt(diff.get(1)) && s.charAt(diff.get(1)) == goal.charAt(diff.get(0));
26     }
27 }

 

标签:return,goal,charAt,get,Strings,swap,diff,LeetCode,Buddy
来源: https://www.cnblogs.com/Dylan-Java-NYC/p/16632831.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有