Dev: 개발/Algorithm
문자열에 포함된 문자들이 전부 유일한지 검사하는 알고리즘을 구현하라.
KR_Goodnews
2016. 9. 11. 16:21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /* 코딩인터뷰 완전분석 - 배열과 문자열 1.1 문자열에 포함된 문자들이 전부 유일한지를 검사하는 알고리즘을 구현하라. 다른 자료구조를 사용할 수 없는 상황이라면 어떻게 하겠는가? */ // brute force // 빈 배열 arrText를 하나 만들어놓고, 입력된 문자열을 읽어들이면서 배열에 추가한다. // 배열에 추가할때 arrText를 순차검색하며 기존에 있던 문자열인지 아닌지를 검사한다. // arrText에 있던 문자열이면 바로 false를 반환한다. func isUniqueChars(str: String) -> Bool { var arrText:[Character] = [] for ch in str.characters { // arrText를 검색하고, 기존에 있었던 문자면 바로 false 반환, 기존에 없었던 문자라면 arrText에 추가 for chInArr in arrText { if chInArr == ch { return false } } arrText.append(ch) } return true } isUniqueChars("apple") // false(중복 있음) isUniqueChars("Cat, Dog!") // true // 개선점 // 1. 문자열의 길이가 문자집합의 크기보다 클 경우 바로 false를 반환하면 더욱 속도를 빠르게 할 수 있다. // 예를 들어, ASCII의 경우 128가지의 문자가 존재하는데, 문자열의 길이가 130이라면 무조건 중복이 있다는 뜻이다. // 단, 이 방법은 문자열이 알파벳이나, ASCII 코드이거나 하는 제한형식을 알 경우에만 사용 가능하다. | cs |