Всякий раз, когда мне нужно быстро извлечь что-то из HTML-документа, я использую Tidy, чтобы преобразовать его в XML, а затем использовать XPath или XSLT, чтобы получить то, что мне нужно. В вашем случае что-то вроде этого:
//p/a[@href='foo']
Первый создает промежуточную строку (которая будет назначена на s
после операции +
), а вторая - нет (зависит от емкости строки).
Сложность в худшем случае одинакова в обоих случаях, в лучшем случае это просто копирование новой строки для второго случая с полной копией обеих строк для первого случая (+ выделение памяти и освобождение). [115 ]
Тот факт, что ваш get TLE
(Time Limit Exceeded), вероятно, связан с этим наихудшим случаем, который всегда копирует огромные строки, а не просто добавляет что-то к существующей (без перераспределения). Как и в случае с вектором, в string
должна быть некоторая эвристика, чтобы заранее получить адекватную пропускную способность.
Как сказал @Slava, этот пример должен быть написан по-другому, я полагаю, что реальный код отличается.