2010-01-19 2 views
4

palindrome number/string의 홀수/짝수 길이를 확인하는 것이 좋은가요? 내가 건너 온 대부분의 스 니펫은이 기본 테스트를 수행하지 않습니다. 길이가 짝수이면 회문이 될 수 없습니다.Palindrome을 확인 하시겠습니까?

if len(var) % 2 != 0: 
    # could be a palindrome, continue... 
else: 
    break 

또는 첫 번째 숫자와 마지막 숫자/문자를 직접 비교하는 것이 좋을까요?

수정 : 바보 같은 질문은 두 번 생각해야합니다. :)

+5

박사, 메모, 반대! 패스트 푸드는 결코 비만을 예방하지 못합니다. –

+1

@Nimbuz : 한번 생각해 보면 충분합니다 :-) –

+0

@ 존 예,하지만 두번 째로 얻지는 못했습니다 ....... – 3zzy

답변

22

ABBA - 예 : palindrome은 4 글자로 짝수 길이를 의미합니다.

회문 동일한 뒤로 또는 앞으로 판독하는 단어, 구문, number 또는 characters 다른 시퀀스 ...

+0

아! 좋아, 열심히 생각 했어야 했어! :) – 3zzy

+4

짝수 또는 홀수 길이의 단어를 앞뒤로 앞으로 반복하면 결합 된 단어의 길이가 짝수가 될 것입니다. hello = helloolleh. –

+9

프로그래밍 관련 질문에 대한 유효한 대답 일 수는 없을 것입니다. –

8

baab = 회문 심지어

+1

4가 유일한 예외입니까? – 3zzy

+1

다른 방법으로 우리는 baaaab을 가질 수 없습니다. 이것은 여전히 ​​회문입니다. – Aly

+0

** bb ** 또한 회문입니다 :-) –

1

에도 문자열 길이가 너무 회문 될 수있다 (4)의 길이를 갖는다. Wikipedia은이 제한 사항에 대해서는 아무 말도하지 않습니다.

10

회문 확인하는 가장 쉬운 방법은 단순히를이다이다 이 s를 뒤로 걸어 얻을 수있는 부정적인 단계 확장 된 조각을 사용

def ispalindrome(s): 
    return s == s[::-1] 

: 그것은 역의에 대해 문자열 비교 그 반대.

+2

부울 반환 값에 대해 두 개의 등호가 필요합니까? '복귀의 ==의 [:: - 1]' – tgray

+0

사용 == 없습니다 = – cmaynard

+0

@tgray을 (더 많은 문자가 행복 스택 오버 플로우를 만들기 위해) : 오, 그래 내가 그랬어. – sth

2

단순 케이스 : aa.

더 복잡한 경우 : aaaa.

등등.

+2

알고있다. ,의 훨씬 간단하게 구현을 약 1/10 속도이며, "AB"는 회문이라고 말한다 : –

3

이 시도 :

is_palindrome = lambda s : all(s1==s2 for s1,s2 in zip(s[:len(s)/2],s[-1:-(len(s)+1)/2:-1])) 

은 즉시 불일치가 발견 된 바와 같이 후방 절반 전반부 및 단락을 검사한다.

+0

이 솔루션은 @sth만큼 메모리를합니다. 여기에 고정 된 메모리 오버 헤드 만있는 더 나은 솔루션이 있습니다. 범위 (len (s) // 2)에있는 all (s [i] == s [-i-1]). 그것은 또한 귀하의 모범보다 약 20 % 더 빠릅니다. –

+0

아야! 내 테스트도 약간 * 너무 밝았습니다. 이제 "ab"테스트에서 실패 할 내 대답을 편집했습니다. 내 편견 최근 인덱싱 정수 첨자를 사용하는 것보다 요소 반복 더있다, 내가 문자열의 양쪽 끝에서 산책 발전기를 사용하여이에서 약간 다른 실행을 것 같아요. – PaulMcG

+0

islice, izip을 시도하고 반대? 전체 (반전 islice에서 C1의 ==에 대한 C1, C2, C2 (izip ((S), (S)), 0, LEN (S) // 2)) –

0
n=raw_input("Enter a string==>") 
n=int(n) 

start=0 
term=n 

while n>0: 
    result=n%10 
    start=start*10+result 
    n=n/10 

print start 

if term==start: 
    print "True" 
else: 
    print "False"