680. Valid Palindrome II
728x90
반응형
Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.
Example 1:
Input: "aba" Output: True
Example 2:
Input: "abca" Output: True Explanation: You could delete the character 'c'.
Note:
- The string will only contain lowercase characters a-z. The maximum length of the string is 50000.
1. 브루트포스 풀이 (시간 초과)
처음에 이렇게 풀었더니 시간 초과가 나왔다. 배열의 길이가 O(n)인데 매번 for문 안에서 새로운 배열을 만들어주는 것 (t)도 O(n)의 시간이 되어 전체 O(n^2)의 시간이 된다.
class Solution(object):
def validPalindrome(self, s):
for i in xrange(len(s)):
t = s[:i] + s[i+1:]
if t == t[::-1]: return True
return s == s[::-1]
2. 그리디 풀이
첫 원소와 마지막 원소를 비교해나가면서 다르다면 첫 원소나 마지막 원소를 삭제했을 때도 다를 때는 결코 펠린드롬 문자열이 될 수 없으므로 False를 리턴하고 하나라도 펠린드롬이 될 경우 True를 반환한다.
class Solution:
def validPalindrome(self, s: str) -> bool:
if s==s[::-1]: return True
i=0
while i<=len(s)/2 and s[i]==s[-(i+1)]: #첫 원소와 끝 원소가 다르면 첫 원소, 마지막 원소를 삭제해본다.
i+=1
s=s[i:len(s)-i] # O(n)
return s[1:]==s[1:][::-1] or s[:-1]==s[:-1][::-1] # 첫원소 삭제했을 때나 마지막원소를 삭제
# 둘 중 하나가 펠린드롬이 나오지 않으면 무조건 False이다.
728x90
반응형
'Leetcode' 카테고리의 다른 글
LeetCode - Array Partition 1 (0) | 2020.10.06 |
---|---|
LeetCode. Group Anagrams (python) (0) | 2020.10.06 |
22. Generate Parentheses (0) | 2020.10.03 |
[Leetcode] 819. most common word (python, javasciript) (0) | 2020.09.29 |
[LeetCode] 937. Reorder Data in Log Files (python, javascript) (0) | 2020.09.29 |
TAGS.