1657. Determine if Two Strings Are Close
Two strings are considered close if you can attain one from the other using the following operations:
Given two strings, word1 and word2, return true if word1 and word2 are close, and false otherwise.
한 문자열에서 다른 문자열을 다음 연산들을 사용하여 동일한 문자열을 얻을 경우 두 문자열이 가까운 것으로 간주합니다.
필요한 만큼 얼마든지 두 문자열에서 연산을 사용할 수 있습니다.
word1과 word2 두 문자열이 주어집니다. word1과 word2가 가까우면 true
를 반환하고 그렇지 않으면 false
를 반환합니다.
Input: word1 = "abc", word2 = "bca"
Output: true
Explanation: word1에서 word2를 두 번의 연산으로 얻을 수 있습니다.
연산 1 적용: "abc" -> "acb"
연산 1 적용: "acb" -> "bca"
Input: word1 = "a", word2 = "aa"
Output: false
Explanation: word1에서 word2를 얻는 것은 불가능하며, 그 반대의 경우도 마찬가지입니다.
Input: word1 = "cabbba", word2 = "abbccc"
Output: true
Explanation: 3번의 연산으로 word1에서 word2를 얻을 수 있습니다.
연산 1 적용: "cabbba" -> "caabbb"
연산 2 적용: "caabbb" -> "baaccc"
연산 2 적용: "baaccc" -> "abbccc"
import java.util.stream.Collectors;
import java.util.*;
class Solution {
public boolean closeStrings(String word1, String word2) {
if(word1.length() != word2.length())
return false;
Map<Character, Long> word1Map = word1.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));
Map<Character, Long> word2Map = word2.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));
Set<Character> word1CharSet = word1Map.keySet();
Set<Character> word2CharSet = word2Map.keySet();
if(!word1CharSet.equals(word2CharSet))
return false;
List<Long> values1 = word1Map.values().stream().sorted().collect(Collectors.toList());
List<Long> values2 = word2Map.values().stream().sorted().collect(Collectors.toList());
if(!values1.equals(values2))
return false;
return true;
}
}