''로 표시된 부분 문자열이 주어진다고 가정합니다. 고유한 부분 문자열을 찾아 이 부분 문자열의 수를 출력으로 반환해야 합니다.
따라서 입력이 s ='prrstvt'와 같으면 출력은 26이 됩니다.
고유한 하위 문자열은 -
'pr', 'rrs', 'st', 'rr', 'tv', 'rstv', 'stvt', 'prrstv', 'prrstvt', 'rrstvt', 's', 'prrst', 'stv ', 'rrstv', 'rst', 'v', 'tvt', 'rstvt', 'r', 'rs', 'vt', 't', 'prr', 'p', 'rrst', 및 'prrs'.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 방문함:=새 지도
- 각 인덱스 ind 및 값 let in s에 대해 do
- temp :=새로운 세트
- 방문에 ind-1이 있으면
- 방문한[ind-1]의 각 has_let에 대해 다음을 수행합니다.
- 임시 목록에 추가(has_let + let)
- 방문한[ind-1]의 각 has_let에 대해 다음을 수행합니다.
- 임시 목록에 추가(let)
- 방문[ind] :=임시
- res :=새로운 세트
- 방문한 각 세트에 대해 다음을 수행합니다.
- res에 추가(방문[세트])
- res의 반환 크기
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s):Visited =dict() for ind, let in enumerate(s):temp =set() if ind-1 in visit:for has_let invisited[ind-1]:temp.add( has_let+let) temp.add(let) 방문[ind] =임시 res =set() 방문:res.update(visited[sets]) return len(res)print(solve('prrstvt'))사전>입력
'prrstvt'출력
26