개발여행의 블로그
[leetcode] 859. Buddy Strings solution(문제 풀이) 본문
https://leetcode.com/problems/buddy-strings/
<Problem>
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.
Example 4:
Input: s = "aaaaaaabc", goal = "aaaaaaacb" Output: true
Constraints:
- 1 <= s.length, goal.length <= 2 * 104
- s and goal consist of lowercase letters.
<Solution>
const buddyStrings = function(s, goal) {
if (s.length != goal.length || s.length < 2 || goal.length < 2) {
return false;
}
if (s === goal) {
const setStr = new Set(s.split(''));
return setStr.size < s.length;
}
const difIndex = [];
for (let i = 0; i < s.length; i++) {
if (s[i] != goal[i]) {
difIndex.push(i);
}
if (difIndex.length > 2) {
return false;
}
}
return s[difIndex[0]] === goal[difIndex[1]] && s[difIndex[1]] === goal[difIndex[0]];
};
<Explanation>
1. 문자열 s와 goal의 길이가 다르면 두 개의 문자의 자리를 바꾸어도 같아질 수 없기 때문에 바로 false를 return 하는 if statement를 추가해주었다.
2. s와 goal의 문자열이 같은 경우, s에 동일한 알파벳의 문자가 있어야 goal과 같이 만들 수 있다.
예를 들어 s = 'abc', goal = 'abc'라면 두 개의 알파벳의 자리를 바꾸어서 goal과 동일한 문자를 만들 수 없다.
set을 사용해서 중복 문자열을 제외하고 set의 length와 s의 length를 비교해서 boolean값을 return
3. 길이가 같은 문자열이 매개변수로 전달될 경우, s의 문자열 앞에서부터 goal의 문자열과 비교해 문자가 다른 곳의 index를 difIndex에 저장해둔다. 다른 문자가 3개이면 문자의 자리를 변경해도 같아질 수 없으므로 if statement를 추가해주었다. difIndex에 저장된 index 값으로 s의 문자열과 goal의 문자열이 같은지 판별하는 연산을 return문에 추가하였다.
'개발 > Algorithm' 카테고리의 다른 글
[알고리즘 javaScript] 숫자 추출 (0) | 2021.11.24 |
---|---|
[알고리즘 javaScript] palindrome 팰린드롬:회문 문자열 (0) | 2021.11.24 |
[유클리드 호제법] Euclidean algorithm (0) | 2021.09.09 |
[leetcode] 7. Reverse Integer 문제 풀이 (0) | 2021.08.15 |
트리와 이진트리(Tree and Binary Tree) (0) | 2020.05.27 |