Quero verificar se uma string pode ser formada por outra string. Por exemplo, no exemplo abaixo, quero verificar quantas strings na lista targets
podem ser formadas por string chars
. Cada caractere em chars
só pode ser usado uma vez.
targets = ["cat","bt","hat","tree"], chars = "atach"
Meu código é o seguinte:
ans = 0
chars_freq = Counter(chars)
for word in targets:
word_freq = Counter(word)
for char in word:
if word_freq[char] > chars_freq[char]:
break
ans += 1
return ans
No exemplo, a resposta deveria ser 2
, mas a minha é 4
. Quem pode ajudar? Obrigado.
Não aumente
ans
incondicionalmente para cada palavra. Você já tem contadores, então aproveite-os ao máximo:Tente isso online!
break
escapa apenas do for-loop mais internoEntão, no seu exemplo, depois que os loops internos terminam (seja por causa da quebra ou não), ans é incrementado em um.
Conforme sugerido no comentário, colocar o incremento em um bloco else só seria executado se o loop interno não fosse interrompido:
Veja também esta resposta