[파이썬][Leetcode][릿코드] number of different integers in a string
1. 문제
1805. Number of Different Integers in a String
Easy
You are given a string word
that consists of digits and lowercase English letters.
You will replace every non-digit character with a space. For example, "a123bc34d8ef34"
will become " 123 34 8 34"
. Notice that you are left with some integers that are separated by at least one space: "123"
, "34"
, "8"
, and "34"
.
Return the number of different integers after performing the replacement operations on word
.
Two integers are considered different if their decimal representations without any leading zeros are different.
Example 1:
Input: word = "a123bc34d8ef34" Output: 3 Explanation: The three different integers are "123", "34", and "8". Notice that "34" is only counted once.
Example 2:
Input: word = "leet1234code234" Output: 2
Example 3:
Input: word = "a1b01c001" Output: 1 Explanation: The three integers "1", "01", and "001" all represent the same integer because the leading zeros are ignored when comparing their decimal values.
Constraints:
1 <= word.length <= 1000
word
consists of digits and lowercase English letters.
출처: Leetcode, https://leetcode.com/
2. 해결방법 시간복잡도
- 단순 코딩 O(N)
3. 문제 해결 및 코드
-
주석을 참고하면서 이해를 돕습니다.
4. 알고리즘 및 해설
- 알파벳을 하나의 리스트로 만든다.
- 이후 반복문을 돌며 해당 값들이 알파벳인지 확인하여 알파벳인 경우 공백으로 변경해준다.
- 공백을 기준으로 나눠준뒤 해당 값들을 정수형 리스트로 다시 만들어준다.
- 이후 중복을 제거하며 리스트의 길이를 반환해준다.
5. 더 알아보기
- 해당 문제의 알파벳은 정규표현식으로 간단하게 풀수도 있다.
import re class Solution: def numDifferentIntegers(self, word: str) -> int: word = re.sub('[a-zA-Z]',' ', word) return len(set(int(i) for i in word.split()))
- 단 2줄로 간단하게 풀었다. 정규표현식의 sub를 통해 알파벳이 있으면 공백으로 대처한다.
- 공백을 기준으로 나눠진 수들을 중복을 제거한 뒤 길이를 출력한다.