标签: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
and2
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
andgoal
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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。