Problem From.
https://leetcode.com/problems/buddy-strings/
오늘 문제는 문자 s 에서 두 문자의 순서를 바꾸어서 goal 을 만들 수 있는지 보는 문제였다.
먼저 s 와 goal 을 비교하며, 서로 다른 문자를 묶어낸다.
그리고 만약 다른 문자가 없다면 두개만 순서를 바꿔서 같은 문자가 되는지 확인하고, 만약 다른 문자의 크기가 2가 아니라면 false 를 반환한다.
마지막으로 첫번째에 나온 다른 문자와 두번째에 나온 다른 문자가 같다면 true 를 반환해준다.
class Solution {
fun buddyStrings(s: String, goal: String): Boolean {
if(s.length != goal.length) return false
val diffs = s.zip(goal).filter { it.first != it.second }
return when {
diffs.isEmpty() -> s.groupBy { it }.map { it.value.size }.max() ?: 0 > 1
diffs.size != 2 -> false
else -> diffs[0].first == diffs[1].second && diffs[1].first == diffs[0].second
}
}
}