LeetCode 859. Buddy Strings

原题链接在这里: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 }

 

posted @ 2022-08-28 15:21  Dylan_Java_NYC  阅读(37)  评论(0编辑  收藏  举报