문자열 s가 있다고 가정합니다. 우리는 s의 가장 긴 nice 부분 문자열을 찾아야 합니다. 문자열 s의 경우 s의 모든 알파벳 문자가 대문자와 소문자로 모두 표시되면 nice라고 합니다. 이러한 하위 문자열이 여러 개 있는 경우 가장 먼저 발생한 하위 문자열을 반환합니다.
따라서 입력이 s ="ZbybBbz"와 같으면 소문자 및 대문자 B가 포함되어 있으므로 출력은 "bBb"가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
cur_max:=-1
-
res:=빈 문자열
-
범위 0에서 s까지의 i에 대해
-
c :=s[i]
-
위 :=새로운 세트
-
더 낮은 :=새로운 세트
-
c가 소문자이면
-
아래에 c 추가
-
-
c가 대문자인 경우
-
c를 대문자로 추가하되 소문자로 변환하기 전에
-
-
범위 i+1에서 s까지의 j에 대해 수행
-
c :=s[j]
-
c가 소문자이면
-
아래에 c 추가
-
-
c가 대문자인 경우
-
c를 대문자로 추가하되 소문자로 변환하기 전에
-
-
상한이 하한과 같으면
-
j-i> cur_max이면
-
cur_max :=j-i
-
res :=s의 부분 문자열[인덱스 i에서 j+1까지]
-
-
-
-
-
반환 해상도
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def solve(s): cur_max= -1 res="" for i in range(len(s)): c = s[i] upper = set() lower = set() if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) for j in range(i+1,len(s)): c = s[j] if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) if upper == lower: if j-i>cur_max: cur_max = j-i res = s[i:j+1] return res s = "ZbybBbz" print(solve(s))
입력
"ZbybBbz"
출력
bBb