1 분 소요

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. 해결방법 시간복잡도

  1. 단순 코딩 O(N)

3. 문제 해결 및 코드


  • 주석을 참고하면서 이해를 돕습니다.

4. 알고리즘 및 해설

  1. 알파벳을 하나의 리스트로 만든다.
  2. 이후 반복문을 돌며 해당 값들이 알파벳인지 확인하여 알파벳인 경우 공백으로 변경해준다.
  3. 공백을 기준으로 나눠준뒤 해당 값들을 정수형 리스트로 다시 만들어준다.
  4. 이후 중복을 제거하며 리스트의 길이를 반환해준다.

5. 더 알아보기

  1. 해당 문제의 알파벳은 정규표현식으로 간단하게 풀수도 있다.
    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를 통해 알파벳이 있으면 공백으로 대처한다.
  • 공백을 기준으로 나눠진 수들을 중복을 제거한 뒤 길이를 출력한다.