다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오. 만약 그런 문자가 없다면 _ 를 반환하시오.
"abadabac"
def find_not_repeating_character(string):
fail = []
result = []
for i in range(len(string)):
err = 0
for j in range(i + 1, len(string)):
if string[i] == string[j]:
err += 1
fail.append(string[i])
if err == 0 and string[i] not in fail:
result.append(string[i])
if result:
return result[0]
else:
return "_"
𝑶(𝑵²)
이 된다.𝑶(𝑵²)
이므로 효율적인 코드가 되지 못한다고 생각해 다른 방식으로 코드를 작성해보았다. def find_not_repeating_character(string):
alphabet_index = [0] * 26
result = []
for s in string:
if not s.isalpha():
continue
index = ord(s) - ord("a")
alphabet_index[index] += 1
for i in range(len(alphabet_index)):
occurence = alphabet_index[i]
if occurence == 1:
result.append(chr(i + ord("a")))
for t in string:
if t in result:
return t
return "_"
𝑶(𝑵)
이 되게 된다.𝑶(𝑵)
로 훨씬 효율적인 코드인 것을 볼 수 있다.