Я не понимаю то, что продолжается здесь. Как я должен подать gsub для получения строки "Yaho \'o"?
>> "Yaho'o".gsub("Y", "\\Y")
=> "\\Yaho'o"
>> "Yaho'o".gsub("'", "\\'")
=> "Yahooo"
\' означает $', что это все после совпадения. Снова уберите \ и это работает
"Yaho'o".gsub("'", "\\\\'")
Если бы нам разрешили считать, что вход можно отсортировать в O (N) по radix sort, я бы немного улучшил решение Криса:
Каждый из двух «указателей» перемещения строго вперед, поэтому общая сложность равна O (N), предполагая, что сортировка по радиусу равна O (N) и что возведение в квадрат и сравнение равны O (1). Предположительно, тот, кто поставил этот вопрос, намеревался сделать эти предположения.
В ответ на комментарий спрашивающего на другой ответ: если целые числа на входе не ограничены, то я не думаю, что это можно сделать. Просто вычисление квадрата целого числа требует больше линейного времени (по крайней мере: не известен линейный алгоритм умножения), поэтому рассмотрим вход размером n бит, состоящий из двух целых чисел размером n/3
бит и 2 * n/3
бит. Проверка того, является ли один квадратом другого, не может быть выполнена в O (n). Думаю. Я могу ошибаться.
Простое решение состоит в том, чтобы после сортировки переместить указатели вниз с обоих концов массива, ища пары, которые суммируются до x. Если сумма слишком высока, уменьшите правый указатель. Если значение слишком низкое, увеличьте значение влево. Если указатели пересекаются, ответ - нет.
-121--1315269-"Yaho'o".gsub("'", "\\\\'")
Потому что вы избегаете символа побега, а также избегаете одной цитаты.