У меня есть вопрос о следующей проблеме в Leetcode:
Если заданы две строки S и T, вернуть, если они равны, когда обе они введены в пустые текстовые редакторы. # означает символ возврата на одну позицию.
Пример 1:
Input: S = "ab#c", T = "ad#c"
Output: true
Explanation: Both S and T become "ac".
Пример 2:
Input: S = "ab##", T = "c#d#"
Output: true
Explanation: Both S and T become "".
Пример 3:
Input: S = "a##c", T = "#a#c"
Output: true
Explanation: Both S and T become "c".
Пример 4 :
Input: S = "a#c", T = "b"
Output: false
Explanation: S becomes "c" while T becomes "b".
Note:
1 <= S.length <= 200 </p>
1 <= T.length <= 200 </p>
S и T содержат только строчные буквы и '# 'символов.
Продолжение:
Вы можете решить это за O (N) время и O (1) пробел?
Мой ответ:
def backspace_compare(s, t)
if (s.match?(/[^#[a-z]]/) || t.match?(/[^#[a-z]]/)) || (s.length > 200 || t.length > 200)
return "fail"
else
rubular = /^[\#]+|([^\#](\g<1>)*[\#]+)/
if s.match?(/#/) && t.match?(/#/)
s.gsub(rubular, '') == t.gsub(rubular, '')
else
new_s = s.match?(/#/) ? s.gsub(rubular, '') : s
new_t = t.match?(/#/) ? t.gsub(rubular, '') : t
new_s == new_t
end
end
end
Он работает в терминале и передает приведенные примеры, но когда я отправляю его по коду leetcode, он сообщает мне, что превышен лимит времени. Я попытался сократить его до:
rubular = /^[\#]+|([^\#](\g<1>)*[\#]+)/
new_s = s.match?(/#/) ? s.gsub(rubular, '') : s
new_t = t.match?(/#/) ? t.gsub(rubular, '') : t
new_s == new_t
Но также та же ошибка.
Пока что я считаю, что мой код соответствует времени O (n), потому что есть только два троичных оператора, что в целом равно O (n). Я делаю 3 задания и одно сравнение, поэтому я считаю, что это соответствует сложности пространства O (1).
Я понятия не имею, как выйти из этого, работаю над этим в течение хороших 2 часов ...
Пожалуйста, укажите, есть ли какие-либо ошибки в моем коде, и как я могу это исправить.
Спасибо! :)