시간 복잡도: 최악의 경우 Min(str1,str2)을 반복하고 str1과 str2를 다시 생성하여 (str1.length str2.length)가 되도록 해야 전체적인 시간 복잡도가 높아집니다. O(min(str1,str2) * (str1.length str2.length))
공간 복잡도: O(1) 추가 공간이 필요하지 않습니다.
","image":"http://www.luping.net/uploads/20241012/1728725766670a43065f5b5.jpg","datePublished":"2024-11-07T22:30:30+08:00","dateModified":"2024-11-07T22:30:30+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}두 문자열 s와 t에 대해 s = t t t ... t t인 경우에만 "t가 s를 나눕니다"라고 말합니다(즉, t가 한 번 이상 자체적으로 연결됨).
두 개의 문자열 str1과 str2가 주어지면 x가 str1과 str2를 모두 나누는 가장 큰 문자열 x를 반환합니다.
leetcode에는 쉬운 문제로 표시되어 있지만 즉시 해결책을 찾기가 어려웠다는 점을 인정해야 합니다.
leetcode에서 제공하는 테스트 사례를 검토하고 이에 대해 설명하면서 혼란스러운 점을 설명하겠습니다.
입력: str1 = "ABCABC", str2 = "ABC"
출력: "ABC"입력: str1 = "ABABAB", str2 = "ABAB"
출력: "AB"
문제 설명과 테스트 사례 1에서 두 문자열을 모두 얻을 수 있는 가장 큰 문자열("ABC")을 연결하여 출력해야 한다고 결정했습니다. (기본 문자열 "ABC" === str2 및 "ABC" "ABC" === str1).
그러나 테스트 사례 2를 보면 두 문자열을 모두 생성할 수 있는 가장 긴 문자열인 "ABAB"를 출력해야 한다는 점에서 내 이해가 올바르지 않다는 것을 빨리 깨달았습니다. 그러나 나는 코드로 뛰어들어 해결책을 찾기 시작했습니다. (초보 실수?)
다음과 같은 경우에만 솔루션을 구상할 수 있었습니다.
보시다시피 str1에 str2가 포함되어 있지만 다른 추가 문자도 포함되어 있는 문자열에 대한 내 솔루션이 실패했습니다. s = t t ... t t라는 요구 사항을 위반합니다.
니트코드의 솔루션에 도움을 요청해야 했습니다. 내 문제를 빨리 이해했습니다.
문자열 자체가 아닌 문자열 길이의 GCD를 찾고 있었습니다. 해당 문자열을 반복하여 남은 문자 없이 두 문자열을 모두 만들 수 있는 문자열을 찾아야 합니다.
왜 "ABAB"가 테스트 사례 2의 답이 될 수 없는지 깨달았습니다.
두 문자열을 동일하게 나누기 위해 x를 찾아야 합니다. 따라서 "ABAB"를 문자열로 사용하면 str2를 완전히 생성할 수 있지만 str1의 경우 "ABABABAB"으로 끝납니다. 2개의 "AB"가 초과되어 x를 결합하여 str1을 완전히 생성했다고 말할 수 없습니다.
"ABAB" 길이는 4이고 "ABABAB" 길이는 6입니다. 두 문자열의 GCD = 2. 따라서 출력은 길이가 2인 문자열이어야 합니다.
시간 복잡도: 최악의 경우 Min(str1,str2)을 반복하고 str1과 str2를 다시 생성하여 (str1.length str2.length)가 되도록 해야 전체적인 시간 복잡도가 높아집니다. O(min(str1,str2) * (str1.length str2.length))
공간 복잡도: O(1) 추가 공간이 필요하지 않습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3