소문자 영숫자 문자열 s가 있다고 가정합니다. 모든 숫자가 아닌 문자를 공백으로 교체하기 위해 면도했지만 이제 최소한 하나의 공백으로 구분된 일부 정수가 남습니다. s에 대한 교체 작업을 수행한 후 서로 다른 정수의 수를 찾아야 합니다. 여기서 두 숫자는 선행 0이 없는 소수 표현이 다른 경우 다른 것으로 간주됩니다.
따라서 입력이 s ="ab12fg012th5er67"과 같으면 출력은 3이 됩니다. 왜냐하면 숫자 ["12", "012", "5", "67"]가 이제 "12" 및 "012"이기 때문입니다. 문자열은 다르지만 정수와 같습니다. 따라서 세 개의 고유한 숫자가 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
nums :=새 목록
-
k :=빈 문자열
-
범위 0에서 s까지의 i에 대해
-
s[i]의 ASCII> 47 및 s[i]의 ASCII <58인 경우
-
k :=k s[i]
연결
-
-
그렇지 않으면
-
k가 빈 문자열이 아니면
-
숫자 끝에 k의 정수 형식 삽입
-
k :=빈 문자열
-
-
-
-
k가 빈 문자열이 아니면
-
숫자 끝에 k의 정수 형식 삽입
-
-
숫자로 고유한 요소의 개수를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def solve(s): nums = [] k = "" for i in range(len(s)): if ord(s[i]) > 47 and ord(s[i]) < 58: k += s[i] else: if(k != ""): nums.append(int(k)) k = "" if(k != ""): nums.append(int(k)) return len(set(nums)) s = "ab12fg012th5er67" print(solve(s))
입력
"ab12fg012th5er67"
출력
3