Leetcode Java Greatest Common Divisor of Strings
업데이트:
문제
코드
class Solution {
public String gcdOfStrings(String str1, String str2) {
if (!(str1 + str2).equals(str2 + str1)) {
return "";
} else {
return str2.substring(0, this.getGcd(str1.length(), str2.length()));
}
}
private int getGcd(int a, int b) {
return b == 0 ? a : this.getGcd(b, a % b);
}
}
결과
설명
- 두 문자열 str1과 str2을 이용하여 str2 문자열로 str1 문자열을 나눌 때, 최대 길이의 문자열을 구하는 문제이다.
- 문자열 s는 “t”로 구성된 문자열 “ttt…tt” 문자열로, 해댕 문자열은 문자열 “t”로 문자열 s를 나눌 수 있다고 표현한다.
- str1과 str2를 번갈아 앞뒤로 더한 문자열이 동일한지 여부에 따라 결과를 반환한다.
- 두 문자열이 동일하지 않으면 str2 문자열로 str1 문자열을 나눌 수 없으므로, 빈 문자열(““)을 주어진 문제의 결과로 반환한다.
- 위의 경우가 아니라면, str2의 처음부터 두 문자열의 길이의 최대 공약수 위치 이전까지 문자열을 잘라 주어진 문제의 결과로 반환한다.
해설
- 문자열을 나누는데 기준은 str1이 str2로 구성되어야 한다.
- 그렇기 때문에 두 문자열 str1과 str2을 앞뒤로 합친 결과가 동일해야 나눌 수 있다.
- 위의 경우가 아니라면, 두 문자열 str1과 str2의 길이에 대한 최대 공약수를 구하면 최소 중복을 제거한 최대 길이의 문자열을 구할 수 있다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기