Ниже я публикую два решения, которые я пробовал в leetcode для проблемы №: 344.
https://leetcode.com/problems/reverse-string/
Решение 1
class Solution:
def reverseString(self, s: List[str]) -> None:
return s[::-1]
Решение 2
class Solution:
def reverseString(self, s: List[str]) -> None:
first = 0
last = len(s) - 1
while first <= last:
s[first], s[last] = s[last], s[first]
first += 1
last -= 1
return s
Насколько я понимаю, оба решения на месте. Однако решение 1 не принимается и указывает на неправильный ответ. Решение 2 принято. Может ли кто-нибудь помочь мне?
Первый не на месте. Ваша сигнатура функции указывает, что вы ничего не возвращаете, но делаете.
Вопрос в том, чтобы ничего не возвращать, что означает, что вам нужно выполнить реверсирование на месте. Кроме того, это список строк, а не строк, поэтому все, что вы измените внутри функции, будет отражено в списке, потому что списки изменяемы.
Правильное решение будет
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s.reverse()
Также если вы хотите сделать в своем стиле, то правильная строка будет
s[:] = s[::-1]
Первое решение создает новый список и не изменяет параметр (что также выглядит чище).
Редактировать: Не обращайте внимания на следующую часть. Это ничего не сделает. Спасибо.
Однако вы можете сделать что-то вроде
s = s[::-1]
вместо оператора возврата.
Это решение не изменит объект, отправленный в функцию, поэтому решение нельзя понимать как локальное.
Это не работает, вы можете попробовать это по ссылке выше. Так должно быть
s[:]=s[::-1]