-
[Algorithm] - 기본 문자열 처리Algorithm/Algorithm 2022. 4. 12. 16:05
문자열 처리
문자열 관련하여 반복되는 개념들이 자주 나와 정리하기 위하여 쓴 글입니다.
1. 회문 ( palindrome )
문자열에 대해서 거꾸로 봐도 동일한지 여부
# 1. 회문(palindrome) temp = '가나다다나가' def palindrome ( data ) : if data == data[::-1] : return True return False print ( palindrome(temp) ) print( temp[::-1]==temp )
2. 정규 표현식
정규 표현식을 이용한 문자열 컨트롤 ( re )
- re.sub( '패턴' , '바꿀문자열' , '적용할 문자열' )
- re.compile('패턴') = 문자열 내에서 패턴 찾을 때 사용
- match = 문자열의 처음부터 패턴이 일치하는지 확인 및 패턴이 일치하는 값만 출력
- search = 패턴이 일치하는 첫번째 문자 출력
- findall = 패턴이 일치하는 모든 문자열 출력
# 2. 정규 표현식 # re.sub( '패턴' , '바꿀문자열' , '적용할 문자열' ) import re print ( re.sub( '[0-9]' , 'n' , '1a2b3c4d' )) > nanbncnd q = re.compile('a[0-9]+b') # match q.match( 'a1b ac' ) <re.Match object; span=(0, 3), match='a1b'> # search q.search( 'abb a12b' ) > <re.Match object; span=(4, 8), match='a12b'> # findall q.findall( 'a1b a2b a123c' ) > ['a1b', 'a2b']
3. 문자열 뒤집기
1)Rerverse Function
2)Slicing
# 3. 문자열 뒤집기 # 1) reverse def reverse_data ( data ) : str_data = list(data) str_data.reverse() return ''.join( str_data ) # 2) slicing def slicing_data ( data ) : return ''.join ( list(data)[::-1] ) temp = 'abcdef' print ( temp ) print ( reverse_data(temp) ) print ( slicing_data(temp) )
4. 조건에 맞게 재정렬
일반적으로 DB문자열 재처리 하는 문제에 경우 해당
# 4. 조건에 맞게 재정렬 temp = ['1 A' , '1 B' , '6 A' , '2 D' , '4 B'] print ( temp ) temp.sort(key = lambda x : x.split()[1] ) print ( temp ) temp = ['kimuksung 20220412 댓글123' , 'te209 20220311 댓글55' , ' xnasj2 20220318 댓글99' ] def db_solution( data ) : data.sort(key = lambda x : ( x.split()[1] , x.split()[0] ) ) return data print ( temp ) print ( db_solution( temp ))
5. 문자열 내 가장 많이 나오는 단어
동일한 갯수여도 전부다 출력할 수 있어야 한다.
# 5. 문자열 내에서 가장 많이 나오는 단어 # 동일 갯수라도 전부 출력 import re from collections import Counter paragraph = "Bobs hit a ball, the hit BALL flew far after it was hit by Bobs ! Bobs" def many_repeat_data ( data ) : answer = [] data = re.sub ( '[^\w]' , ' ' , data ) data = Counter(data.split()) max_value = data.most_common(1)[0][1] for index , value in data.items() : if value != max_value : break answer.append(index) return answer print ( many_repeat_data ( paragraph ) )
6. 문자열에서 가장 많이 나오는 패턴 찾기
- 동일한 갯수이면 가장 긴 단어들로만 추출
# 6. 하나의 단어에서 가장 많이 나오는 반복 패턴 찾기 # 동일한 갯수면 전부 출력 from collections import Counter #word = 'abcabcdefabc' word = 'aBxdeydeabZ' def many_repeat_pattern ( data ) : data = data.lower() n = len(data) count_data = [] answer = [] for i in range( 1 , n+1 ) : for j in range ( n ) : if i+j > n : continue count_data.append( data[j:j+i]) count_data = Counter(count_data) count_data = sorted(count_data.items() , key=lambda x: (- x[1] , -len(x[0]) )) max_len_value , max_value = len(count_data[0][0] ), count_data[0][1] for temp in count_data : index , value = temp if len(index) == max_len_value and value ==max_value : answer.append(index) return answer print ( many_repeat_pattern ( word ) )
7. 단어의 대소문자 경우의 수 모두 출력
# 7. 특정 단어의 대소문자 모든 경우의 수 출력 temp = 'abc' from itertools import product def all_case_upper_lower(data) : temp = list ( product(*zip( data.upper() , data.lower() ) ) ) return [''.join(i) for i in temp] print ( all_case_upper_lower( temp ) )
'Algorithm > Algorithm' 카테고리의 다른 글
[Algorithm] - Graph( Node / Edge/ BFS / DFS ) (0) 2022.08.30 이분 탐색 (0) 2022.08.30 코딩 테스트 문자열 처리 시 주의점 (0) 2022.06.22 [Algorithm] - 문자열 매칭 ( 보이어무어 알고리즘 ) (0) 2022.04.27 [Algorithm] - 최소 신장 트리 (0) 2022.04.11