본문 바로가기

책 요약 정리/파이썬 알고리즘 인터뷰

6장_문자열 조작 요약 정리

팰린드롬: 앞뒤가 똑같은 단어나 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장을 의미한다. 

 

isalnum() : 영문자 , 숫자 여부를 판별하는 함수 

 

def isPalindrome(self, s:str)->bool:
    strs: Deque = collections.deque()

    for char in s:
        if char.isalnum():
            strs.append(char.lower())
    while len(strs)>1:
        if strs.popleft() != strs.pop(): # popleft() O(1) ,pop(0) O(n)
            return False
    return True

 

자료형을 데크로 선언하여 시간 단축한 문제풀이 코드 

 

def isPalindrome(self, s:str)->bool:
    s = s.lower()
    #정규식을 통한 불필요한 문자 필터링
    s = re.sub('[^a-z0-9]','',s)

    return s == s[::-1] # 문자열을 뒤집는 기능

정규식과 슬라이싱을 사용한 문제풀이 코드 

 

def reverseString(self, s: List[str])->None:
    s.reverse() # s[:] = s[::-1] (o)  /  s = s[::-1] (x)

문자열 뒤집는 코드 

 

isdigit() : 숫자 여부인지 판별하여 구분

 

 

def mostConnonWord(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]

 

가장 흔한 단어 출력하는 코드 

 

애너그램 : 일종의 언어유희로 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것 

애너그램을 판단하는 간단한 방법은 정렬하여 비교하는 것 

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())

 

sorted() : key=옵션을 지정해 정렬을 위한 키, 함수를 별도로 지정한다. 

Ex) sorted(c, key=len) : 정렬을 위한 함수로 길이를 지정

 

a=['cde','cfc','abc']
def fn(s):
    return s[0],s[-1]
print(sorted(a,key=fn))

>>> ['abc', 'cfc', 'cde']

fn 함수를 이용하여 첫번째첫 번째 키는 첫 문자열/ 첫 번째 키가 동일할 경우 두 번째 키인 마지막 문자열 순으로 정렬하도록 지정함