다음과 같이 설명하면 쉬운 문제입니다.
모든 대문자를 소문자로 변환하고 영숫자가 아닌 문자를 모두 제거한 후 앞뒤로 동일하게 읽는 경우 구문은 회문입니다. 영숫자에는 문자와 숫자가 포함됩니다.
문자열 s가 주어졌을 때 회문이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
예 1:
입력: s = "남자, 계획, 운하: 파나마"
출력: true
설명: "amanaplanacanalpanama"는 회문입니다.예 2:
입력: s = "자동차 경주"
출력: 거짓
설명: "raceacar"는 회문이 아닙니다.예 3:
입력: s = " "
출력: true
설명: s는 영숫자가 아닌 문자를 제거한 후의 빈 문자열 ""입니다.
빈 문자열은 앞뒤로 똑같이 읽으므로 회문입니다.제약조건:
1
s는 인쇄 가능한 ASCII 문자로만 구성됩니다.
회문에 따르면 기본적으로 알파가 아닌 모든 것을 제거한 다음 호출하여 대소문자 메서드를 낮추고 비교를 위해 되돌립니다.
방법과 약간의 reg exp를 사용하면 이 문제를 3줄로 해결할 수 있습니다.
class Solution { public boolean isPalindrome(String s) { final String reduced = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); final String inverted = new StringBuilder(reduced).reverse().toString(); return reduced.equals(inverted); } }
런타임: 15ms, Valid Palindrome에 대한 Java 온라인 제출의 22.51%보다 빠릅니다.
메모리 사용량: 44.8MB, 유효한 Palindrome에 대한 Java 온라인 제출의 34.15% 미만입니다.
간단하고 쉬운 질문이면 충분하지만 더 나은 성능을 얻으려면 각 문자를 반복하고 확인하고 필요에 따라 제거하고 조정할 수 있습니다. 이 경우 leetcode에서 saksham 답변을 확인하세요(자세히 설명하고 싶다면 , 아래에 댓글을 남겨주세요).
—
그렇습니다! 논의할 다른 사항이 있으면 언제든지 댓글을 남겨주세요. 누락된 사항이 있으면 알려주시면 그에 따라 업데이트할 수 있습니다.
다음 포스팅까지! :)
위 내용은 Leetcode — 탑 인터뷰 –. 유효한 회문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!