Given a string s consisting of small English letters, find and return the first instance of a non-repeating character in it. If there is no such character, return '_'.
For s = "abacabad", the output should be
solution(s) = 'c'.
There are 2 non-repeating characters in the string: 'c' and 'd'. Return c since it appears in the string first.
For s = "abacabaabacaba", the output should be
solution(s) = '_'.
There are no characters in this string that do not repeat.
[execution time limit] 4 seconds (py3)
[input] string s
A string that contains only lowercase English letters.
Guaranteed constraints:
1 ≤ s.length ≤ 105.
[output] char
The first non-repeating character in s, or '_' if there are no characters that do not repeat.
문자열에서 :
중복되지 않는, 그 중에서 가장 빠른 index를 가진 알파벳을 구해내는 문제이다.
처음 나의 생각 :
ex) a : 1, b : 2 이런 식으로
dict에서 X : 1 인 것만 뽑아서, 다시 한 번 반복문으로 최소 값을 찾아준다.
1인 값이 있었다면 return char, 없다면 return '_'
def solution(s):
mydict = {}
min_value = 100000
for char in s :
if mydict.get(char) == None :
mydict[char] = 1
else :
mydict[char] += 1
for key in mydict :
if mydict[key] == 1 :
if s.index(key) < min_value :
min_value = s.index(key)
if min_value == 100000 :
return "_"
else :
return s[min_value]
시간 내에 잘 풀렸다.
def solution(s):
for c in s:
if s.index(c) == s.rindex(c):
return c
return '_'
rindex() 나 rfind()를 이용해 푼 정답들이 상위권에 올랐다.
rindex(), rfind()는 끝에서부터 index를 반환해주는 메소드이다.
그러나 rindex()는 해당 원소가 없을 경우 error를 , rfind()는 -1을 return 한다.
사실 이러한 메소드에 대해 모르고 있었는데
rindex(), rfind()에 대해 알 수 있었다.
문제를 풀다보니 내가 모자란 점도 알 수 있고, 더 알고싶어진다. 무엇보다 꾸준히 해보아야겠다.