문제 : 문자열에 포함된 문자들이 전부 유일한지 검사하라
<Check a string has unique character>
1차 솔루션
code
/** * Autor : Joosang Kim * Version : 1.0.0 * Method :Check String elements * Params : String * Return : Boolean */ public boolean checkStringElements(String str){ boolean ret = false; HashMap<Character, Integer> charMap = new HashMap<Character, Integer>(); for (int i =0; i < str.length();i++){ char key = str.charAt(i); if(charMap.containsKey(key)){ ret = false; break; }else{ int val = charMap.get(key) == null ? 0 : charMap.get(key); val += 1; charMap.put(key, val); ret = true; } } return ret; }
feedback
- 문자열 구성이 ASCII 인가 UTF-8인가
ASCII 와 UTF-8
ASCII
문자를 8bit(1Byte)로 표현
0 ~ 127 번까지 맵핑되어 있으며, 영어사용만 권장
UTF-8
- 0 ~ 127 사이의 문자는 1byte로 저장. 128이상인 것들은 2byte , 3byte로 늘려나감
2차 솔루션
ASCII 코드를 사용한다고 가정
Boolean 개념 도입
code
/** * Autor : Joosang Kim * Version : 1.0.0 * Method :Check String elements * Params : String * Return : Boolean */ public boolean checkStringElements(String str){ boolean ret = false; if(str.length() > 256){ // str contains multiple character return ret; } boolean[] char_set = new boolean[256]; for(int i = 0; i< str.length(); i++){ int val = str.charAt(i); if(char_set[val]){ return ret; } char_set[val]=true; } ret = true; return ret; }
- feedback
- ASCII 코드로 가정했으므로, 중복없는 문자는 최대 256 개 존재 가능( 그 이상 존재시 중복항 존재 문자열)
- 256사이즈의 boolean 배열에 문자열 원소값에 ASCII값을 대응.
- ASCII index에 true / false 구분