반응형
class Solution:
    def firstUniqChar(self, s: str) -> int:
        dict_ = dict()
        
        for char in s:
            dict_[char] = dict_.get(char, 0) + 1
            
        for i in list(dict_.keys()):
            if dict_[i] == 1:
                return s.index(i)
            
        return -1

한번에 풀긴했음.근데 이건 python 3.7+ 에만 적용 가능( dictionay input 키 순서가 유지된다는 전제 필요)

 

 

하지만 index, 알파벳, 각 알파벳이 나오는 횟수 3가지 정보를 저장하는 효율적인 방법은??

def firstUniqChar(s: str) -> int:
    letters = 'abcdefghijklmnopqrstuvwxyz'
    index = [s.index(l) for l in letters if s.count(l) == 1]
		# 하나만 있는 char의 index들을 저장 
    return min(index) if len(index) > 0 else -1

빠른 이유는?

  • string의 index 함수가 c함수이기 떄문
d = {}
    
    for l in s:
        if l not in d: d[l] = 1
        else: d[l] +=1
        
    index = -1
    for i in range(len(s)):
        if d[s[i]]==1:
            index=i
            break

이게 제일 범용적으로 사용할 수 있는 코드 같음

class Solution:
    def firstUniqChar(self, s: str) -> int:
        d = {}

        for l in s:
            if l not in d: d[l] = 1
            else: d[l] +=1

        index = -1
        for i in range(len(s)):
            if d[s[i]]==1:
                index=i
                break
                
        return index

반응형

'코딩테스트' 카테고리의 다른 글

Leetcode 125. Valid Palindrome  (0) 2022.10.02

+ Recent posts