📝 isalnum(), 정규 표현식
from collections import deque
class Solution(object):
def isPalindrome(self, s):
#문자와 숫자 외 나머지 필터링
strs = deque()
for char in s:
if char.isalnum():
strs.append(char.lower())
#양쪽 끝 문자가 다르면 팰린드롬이 아님
while len(strs) > 1:
if strs.popleft() != strs.pop():
return False
return True
class Solution(object):
def isPalindrome(self, s):
#문자와 숫자 외 나머지 필터링
strs = []
for char in s:
if char.isalnum():
strs.append(char.lower())
return strs == strs[::-1] #슬라이싱
class Solution(object):
def isPalindrome(self, s):
s = s.lower() #s내의 문자 소문자로 변환
#정규식을 사용하여 문자와 숫자 외 나머지 필터링(정규표현식 사용)
s = re.sub('[^a-z0-9]','',s)
return s == s[::-1] #슬라이싱
📝 reverse()
class Solution(object):
def reverseString(self, s):
left, right = 0, len(s)-1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return s
class Solution(object):
def reverseString(self, s):
return s.reverse()
📝 isdigit(), sort(), sorted(), lambda
class Solution(object):
def reorderLogFiles(self, logs):
letter, digit= [], []
for log in logs:
if log.split()[1].isdigit(): #0인덱스는 식별자
digit.append(log)
else:
letter.append(log)
#digit-logs는 순서를 유지
#letter-logs는 컨텐츠를 사전순으로 정렬.
#만약 컨텐츠가 같다면, 식별자를 사전순으로 정렬
letter.sort(key = lambda x : (x.split()[1:], x.split()[0]))
#letter-logs가 digit-logs보다 앞에 존재해야 함
return letter + digit
📝 정규표현식, Counter
from collections import Counter
class Solution(object):
def mostCommonWord(self, paragraph, banned):
strs = [] #카운트 할 문자만 모아놓을 리스트
for s in re.sub(r'[^\w]', ' ', paragraph).lower().split():
if s not in banned: #금지 된 단어랑 다를 경우
strs.append(s)
return Counter(strs).most_common(1)[0][0]
📝 defaultdict, join(), values()
from collections import defaultdict
class Solution(object):
def groupAnagrams(self, strs):
anagrams_dic = defaultdict(list)
for str in strs:
anagrams_dic[''.join(sorted(str))].append(str)
return list(anagrams_dic.values())
#str = 'eat' 일 경우, sorted(str)하면 ['a', 'e', 't'] 반환
#str.sort()하면 AttributeError: 'unicode' object has no attribute 'sort'발생
📝 max()
class Solution(object):
def longestPalindrome(self, s):
#팰린드롬 일 경우 계속하여 왼쪽, 오른쪽으로 확장해나아가는 함수
def expand(left, right): #투 포인터 left, right
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1 #왼쪽으로 확장
right += 1 #오른쪽으로 확장
return s[left + 1:right]
#길이가1 이거나 s전체가 팰린드롬 일 경우 s를 그대로 return
if len(s) < 2 or s == s[::-1]:
return s
longest = '' #가장 긴 팰린드롬
#길이가 짝수인 팰린드롬(초기 길이 2), 홀수인 팰린드롬(초기길이3)으로 시작
for i in range(len(s)-1):
longest = max(longest, expand(i, i + 1), expand(i, i + 2), key = len)
return longest
#max도 key속성 이용하여 기준 정할 수 있음