TÓPICO

100% WA em Python. Todos os casos batem...

Enzo perguntou 2 years ago

A solução parecia ser indolor mas algo deu muito errado.

Como as letras estão em ordem alfabetica e elas são iteradas sempre do comeco, não há necessidade de usar uma função 'sort'. Para cada caractere alfanumerico da frase há uma adição no dicionario e pode haver uma atualização de qual é (ou quais são) as chaves com mais frequencia - 'maximo'. Apos o termino da frase o dicionario de presenças é percorrido e, para cada chave que tenha o valor igual ao maximo (lembrando que esta em ordem alfabetica) a chave (letra correspondente) é printada Depois disso ele é resetado e mais uma frase é recebida. Infelizmente não consegui encontrar o erro...

class Dicionario(object):

    def __init__(self):
        self.letras = {
            'a': 0,
            'b': 0,
            'c': 0,
            'd': 0,
            'e': 0,
            'f': 0,
            'g': 0,
            'h': 0,
            'i': 0,
            'j': 0,
            'k': 0,
            'l': 0,
            'm': 0,
            'n': 0,
            'o': 0,
            'p': 0,
            'q': 0,
            'r': 0,
            's': 0,
            't': 0,
            'u': 0,
            'v': 0,
            'w': 0,
            'x': 0,
            'y': 0,
            'z': 0,
        }
        self.maximo = 0

    def resetDicionario(self):
        self.letras = {
            'a': 0,
            'b': 0,
            'c': 0,
            'd': 0,
            'e': 0,
            'f': 0,
            'g': 0,
            'h': 0,
            'i': 0,
            'j': 0,
            'k': 0,
            'l': 0,
            'm': 0,
            'n': 0,
            'o': 0,
            'p': 0,
            'q': 0,
            'r': 0,
            's': 0,
            't': 0,
            'u': 0,
            'v': 0,
            'w': 0,
            'x': 0,
            'y': 0,
            'z': 0,
        }
        self.maximo = 0

    def inserirLetra(self, letra):
        self.letras[letra] += 1
        if self.letras[letra] > self.maximo:
            self.maximo = self.letras[letra]

    def mostraMaiorFrequencia(self):
        for letra, valor in self.letras.items():
            if valor == self.maximo:
                print(letra, end = '')
        print()

nTestes = int(input())
letras = Dicionario()

for i in range(nTestes):

    entrada = input()
    frase = entrada.lower()

    for letra in range(len(frase)):
        if frase[letra].isalpha():
            letras.inserirLetra(frase[letra])

    letras.mostraMaiorFrequencia()
    letras.resetDicionario()

Alguem tem alguma ideia?

Lembre de não publicar soluções. Sua publicação pode ser revisada por nossos moderadores.

  • Fábio Lobato respondido 2 years ago

    #https://www.urionlinejudge.com.br/judge/en/problems/view/1255
    n = int(input())
    for i in range(n):
        palavra = input()
        palavra = palavra.lower()
        alfabeto = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
        d = dict()
        for i in alfabeto:
            d[i] = 0
        for i in range((len(palavra))):
            if(palavra[i] in d):
                d[palavra[i]] = d[palavra[i]] + 1
        pontuacao = []
        for i in d:
            pontuacao.append(d[i])
        maximo = max(pontuacao)
        frequentes = []
        for i in d:
            if(d[i] == maximo):
                frequentes.append(i)
        for i in range(len(frequentes)):
            if(i<(len(frequentes))):
                print("%s"%(frequentes[i]), end='')
        print()
    
  • Fábio Lobato respondido 2 years ago

    Cara, estou com um problema semelhante na implementação em Python. A sua lógica parace estar correta.