class Solution:
def isPalindrome(self, s: str) -> bool:
s= s.lower()
data=[]
for c in s:
if c.isalnum():
data.append(c)
comp = data.copy()
data.reverse()
return comp == data
re 부분 확인할 것
슬라이싱 참고할 것! <- 내부 C로 구현 제일 빠름
-> [::-1] 뒤집는 코드
import re
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
# 정규식으로 불필요한 문자 필터링
s = re.sub('[^a-z0-9]', '', s)
return s == s[::-1] # 슬라이싱
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s[:]=s[::-1] # s는 이라고 할 경우 메모리 추가 할당이라 안된다고 함
from typing import List
class Solution:
# 투 포인터 스왑 방식 <- 고전적 방식
def reverseString1(self, s: List[str]) -> None:
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
# pythonic
def reverseString2(self, s: List[str]) -> None:
s.reverse()
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
digits = []
letters =[]
for log in logs:
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
letters.sort(key = lambda x : (x.split()[1:], x.split()[0]))
return letters+digits
import re
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
data = re.sub('[^a-z]',' ',paragraph.lower())
data=data.split()
for ban in banned:
idx=[]
for i,d in enumerate(data):
if d == ban.lower():
idx.append(i)
print(idx)
for i in reversed(idx):
data.pop(i)
check = set(data)
cnt =[0]*len(check)
check = dict(zip(check,cnt))
print(check)
for d in data:
check[d]+=1
data = sorted(check.items(),key= lambda x : x[1] ,reverse=True )
return data[0][0]
import collections
import re
from typing import List
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
.lower().split()
if word not in banned]
counts = collections.Counter(words)
# 가장 흔하게 등장하는 단어의 첫 번째 인덱스 리턴
return counts.most_common(1)[0][0]
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
res = []
check = {}
for i, st in enumerate(strs):
data =list(st)
data.sort()
data="".join(data)
if check.get(data) == None:
check[data]=[i]
else:
check[data].append(i)
print(check)
for che in check.items():
tmp = []
for idx in che[1]:
tmp.append(strs[idx])
print(tmp)
res.append(tmp)
return res
import collections
from typing import List
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
anagrams = collections.defaultdict(list)
for word in strs:
# 정렬하여 딕셔너리에 추가
anagrams[''.join(sorted(word))].append(word)
return list(anagrams.values())