Como verificar o número do palíndromo em Python?

Publicados: 2020-11-30

Índice

O que é um Palíndromo?

Um palíndromo é uma palavra, número ou qualquer sequência de caracteres que lê tanto para trás quanto para frente.

Alguns exemplos: detartrated, 1567651, 02/02/2020, Malayalam

Portanto, este artigo mostra várias maneiras de escrever um programa para verificar se uma determinada entrada é um palíndromo ou não, usando Python.

Método 1:

A solução mais ingênua que vem à mente é inverter o número e verificar se ele é igual ao número de entrada. Pode ser feito da seguinte forma:

numero = int(entrada());

reverso = 0

enquanto número > 0:

dígito = número % 10

reverso = reverso * 10 + dígito

numero = numero // 10

se número==reverso:

print("é um palíndromo!")

outro:

print(“não é um palíndromo!”)

No entanto, isso compromete a legibilidade do código e tem mais linhas de código do que o necessário. Confira nosso curso online de ciência de dados para saber mais.

Aqui está uma maneira curta e doce de verificar um número usando apenas uma linha.

Método 2:

O truque é pegar o número de entrada como um tipo de dados str em vez de int. Em seguida, você pode usar a técnica de fatiamento [::-1] para obter o reverso de uma string e verificar a igualdade na própria instrução if .

numero = entrada()

se número == número[::-1]:

print("é um palíndromo!")

outro:

print(“não é um palíndromo!”)

Método 3:

Este é um método recursivo para verificar se um array é um palíndromo ou não.

def isPalindrome(numbers, start, end):

se início >= fim:

retornar Verdadeiro

if números[início] == números[fim]:

return isPalindrome(numbers, start + 1, end – 1)

outro:

retornar Falso

number= list(map(int, input().split()))

n=len(números)

if isPalindrome(numbers, 0, n-1):

print("é um palíndromo!")

outro:

print(“não é um palíndromo!”)

A função isPalindrome verifica se o primeiro e o último elemento do array são iguais ou não. Caso contrário, a função retorna imediatamente False. Caso contrário, ele verifica recursivamente os próximos elementos extremos até que os dois ponteiros se encontrem no meio.

Leia: Ideias e tópicos do projeto Python

Perguntas comuns de entrevista de codificação relacionadas a palíndromos

#1 Substring palindrômica mais longa

Dada apenas uma string como entrada, você deve retornar o comprimento da substring palindrômica mais longa na string.

Por exemplo:

Entrada: 'acbcbabcc'

Saída: 5 ('cbabc')

Aproximação:

Se tentarmos relacionar isso com um dos problemas mais comuns do DP, a substring comum mais longa, aqui a diferença é que recebemos apenas uma string de entrada enquanto o LCS usa duas strings. Como sabemos que um palíndromo é exatamente igual ao seu reverso, podemos fazer a segunda string como o reverso de nossa entrada dada.

Agora, isso se torna exatamente o mesmo que encontrar LCS.

def LCSubstr(A, B, m, n):

LCSub = [[0 para i no intervalo(n+1)] para j no intervalo(m+1)]

an = 0

para i no intervalo (m+1):

para j no intervalo (n+1):

se (i == 0 ou j == 0):

LCSub[i][j] = 0

elif A[i-1] == B[j-1]:

LCSub[i][j] = 1 + LCSub[i-1][j-1]

ans = max(ans, LCSub[i][j])

outro:

LCSub[i][j] = 0

retorno ans

str1 = entrada()

str2 = str1[::-1]

m = len(str1)

n = len(str2)

print('Comprimento da substring palindrômica mais longa = ', LCSubstring(str1, str2, m, n))

Então, para a entrada acima, obtemos as duas strings como

'acbcbabcc' e

'ccbabcbca'

A substring comum mais longa se torna 'cbabc', que tem comprimento 5.

#2 Verifique se um Anagrama de uma String é um Palíndromo

Dada uma string como entrada, você deve verificar se algum anagrama da string pode ser um palíndromo ou não e retornar sim/não de acordo.

Por exemplo:

Entrada: 'pythonpython'

Saída: Sim

(enquanto a string em si não é um palíndromo, um possível anagrama 'pythonnohtyp' forma um palíndromo)

Entrada: 'harrypotter'

Saída: Não

Aproximação:

Se você observar com atenção, sempre que temos uma string de palíndromo de tamanho par, todos os caracteres da primeira metade são repetidos na segunda metade. Isso significa que todos os caracteres presentes na string ocorrem um número par de vezes.

Quando o comprimento é ímpar, todos os caracteres à esquerda do elemento do meio (não incluso) ocorrem o mesmo número de vezes no lado direito do elemento do meio. Isso significa que há apenas um caractere que ocorre um número ímpar de vezes (elemento do meio) e todos os outros ocorrem em número par de vezes.

Usando essa lógica, podemos armazenar a contagem de caracteres na string em um hash e verificar essas restrições para obter a resposta necessária.

CHAR_RANGE = 256

str1 = entrada()

freq = [0 para i no intervalo(CHAR_RANGE)]

para i em str1:

freq[ord(i)] += 1 #ord(x) dá o valor unicode de x

num_odds = 0

para i no intervalo (CHAR_RANGE):

se freq[i] & 1:

num_odds += 1

if (num_odds > 1):

imprima("Sim")

outro:

imprima("Não")

Conclusão

Em conclusão, os problemas do palíndromo são muito comuns e interessantes. Eles são úteis para resolver vários quebra-cabeças matemáticos e questões de programação competitivas.

Se você está curioso para aprender sobre ciência de dados, confira o Programa PG Executivo em Ciência de Dados do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1 -on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.

Qual é a complexidade de tempo do programa Palindrome?

O número de operações elementares feitas pelo método é frequentemente usado para estimar a complexidade de tempo, assumindo que cada processo elementar leva um determinado tempo para ser concluído. A complexidade de tempo para determinar se um número é ou não um palíndromo é O(log10 (n)). Quando verificamos se os valores são um palíndromo, dividimos o número ou valor por dez em cada iteração. Como resultado, a complexidade temporal é igual ao número de dígitos em um número.

Como é / diferente de // operador em Python?

Quando usamos o operador de divisão, ou seja, uma única barra (/) em Python, o compilador simplesmente divide os dois valores nos lados direito e esquerdo da barra. Mas quando usamos barra dupla(//), ou seja, divisão de piso, pedimos ao compilador para realizar o processo de divisão típico, mas o resultado é o maior número inteiro possível próximo da resposta. Este inteiro é menor ou igual ao resultado da divisão normal.

Qual é o salário básico de um desenvolvedor Python?

É um fato bem conhecido que o Python é amplamente usado na maioria das indústrias e empresas, tornando o Python a segunda linguagem de computação mais bem paga. Python também é a linguagem de programação favorita entre estudantes e profissionais porque é fácil de aprender e é altamente flexível. O salário básico de um desenvolvedor Python na Índia é de cerca de INR 4.27.293 por ano, em média. Profissionais que aprendem Python têm muito escopo, pois o Python também é usado em outros campos, como Ciência de Dados e Aprendizado de Máquina.