Временная сложность: В худшем случае мы перебираем 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 мы говорим «t делит s» тогда и только тогда, когда s = t t t ... t t (т. е. t объединяется само с собой один или несколько раз).
Дано две строки str1 и str2, вернуть наибольшую строку x, такую, что x делит обе строки: str1 и str2.
Несмотря на то, что в лит-коде эта проблема отмечена как «Легкая», я должен признать, что мне было трудно сразу найти решение.
Позвольте мне просмотреть тестовые примеры, предоставленные 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.
Мне пришлось обратиться за помощью к решению Netcode. Я быстро понял свои проблемы:
Я находил НОД длины строки, а НЕ саму строку. Мне нужно найти строку, в которой, повторяя эти строки, я могу создать обе строки без оставшихся символов.
Я понял, почему «ABAB» не может быть ответом для тестового примера 2:
нам нужно найти x такой, чтобы он делил обе строки поровну. поэтому, взяв в качестве строки «ABAB», вы можете полностью создать str2, но для str1 вы получите «ABABABAB». В итоге у вас есть 2 лишних «AB» и вы не можете сказать, что вы полностью создали str1 путем объединения x.
Длина «ABAB» 4 и длина «ABABAB» 6. НОД двух строк = 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