Прежде чем вы подумаете, что это дублируется (есть много вопросов о том, как разделить длинные строки, не нарушая слов), учтите, что моя проблема немного отличается: порядок не важен, и я чтобы соответствовать словам, чтобы использовать каждую линию как можно больше.Разделение длинной строки без разрыва слов строк полного заполнения
Привет,
У меня есть неупорядоченный набор слов, и я хочу, чтобы объединить их, не используя более 253 символов.
def compose(words):
result = " ".join(words)
if len(result) > 253:
pass # this should not happen!
return result
Моя проблема в том, что я хочу попытаться заполнить линию как можно больше. Например:
words = "a bc def ghil mno pq r st uv"
limit = 5 # max 5 characters
# This is good because it's the shortest possible list,
# but I don't know how could I get it
# Note: order is not important
good = ["a def", "bc pq", "ghil", "mno r", "st uv"]
# This is bad because len(bad) > len(good)
# even if the limit of 5 characters is respected
# This is equivalent to:
# bad = ["a bc", "def", "ghil", "mno", "pq r", "st uv"]
import textwrap
bad = textwrap.wrap(words, limit)
Как я могу это сделать?
Это проблема динамического программирования; атакуйте его так же, как если бы вы атаковали [проблему смены монет] (http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/). –