문자열 비교 응용 - 다시 처음부터 되돌아가면서 비교해야할때
1. 문제
2. 풀이
보통 target 문자열 찾을때는 한줄 안에서 똑같이 있는지 찾았지만
이 문제는 target 문자열이 뒤로 넘어가면 다시 처음부터 되돌아가야한다
ZAAAAAAAXY에서 XYZ를 찾고자 할때,
Z XY
하면 하나를 찾을 수 있다는 뜻
어떻게 할 수 있을까
찾고자 하는 문자열 XYZ의 길이가 3이고 처음부터 끝까지 순회하는데...
ZAAAAAAAXY
XYZ에 도달하면 끝인데.. 여기서 YZ는 다시 처음 2글자 ZA와 비교해야하니까..
ZAAAAAAAXY 뒤에 (찾고자하는 문자열 길이-1)만큼의 문자열을 새로 붙여서
ZAAAAAAAXYZA로 만들고, 처음부터 원래 문자열 길이까지 브루트포스로 순회해서 비교해준다
from sys import stdin
target = stdin.readline().rstrip()
n = int(stdin.readline())
t = len(target)
count = 0
for _ in range(n):
string = stdin.readline().rstrip()
s = len(string)
#처음으로 되돌리기 위해,
#원래 문자열에서 비교하고자하는 문자열 길이만큼 붙여준다
string += string[:t]
find = False
#처음부터 원래 문자열의 길이만큼 순회해준다
for i in range(s):
if target == string[i:i+t]:
count += 1
break
print(count)
'알고리즘 > 문자열 알고리즘' 카테고리의 다른 글
manacher 응용문제로 이해력 높이기 - 회문인 부분문자열의 개수를 찾는법 (0) | 2023.05.04 |
---|---|
manacher algorithm 기본 개념 익혀보기1 (0) | 2023.05.01 |
컴퓨터로 미분하는 방법(문자열 파싱에서 항상 실수하는 부분 복기) (0) | 2023.04.11 |
10진수로 바꾸지 않고 2진수, 8진수 서로 변환하기 (0) | 2023.03.26 |
Trie 기본문제로 감잡아보기 -전화번호 목록, 게임 닉네임- (0) | 2023.01.25 |
TAGS.