В дополнение к тому, что говорят Джимми и Линксоид, факт ограничения общей длины дает вам дальнейшую оптимизацию.Сортируйте строки по порядку длины, затем для каждого s
вы знаете, что вам нужны только a
s, такие что a.length() == targetLength - s.length()
.
Так что, как только вы нажмете на строку длиннее, чем вы можетевырваться из внутреннего цикла (так как все остальные будут длиннее), и вы можете начать с «правильного» места, например, с нижнего бинарного поиска в массиве.
Сложность все еще O (п ^ 2), так как в худшем случае все строки имеют одинаковую длину, равную половине totalLength
.Хотя обычно это должно быть несколько лучше, чем рассмотрение всех пар строк.