300x250
반응형
https://leetcode.com/problems/custom-sort-string/description/
난이도: Medium
* DS&A 01 Mar
내 풀이
class Solution {
public String customSortString(String order, String s) {
int pointer = 0;
char[] ca = s.toCharArray();
for(char c: order.toCharArray()){
for(int i=pointer; i<ca.length; i++){
if(ca[i]==c){
ca[i] = ca[pointer];
ca[pointer++] = c;
}
}
}
return String.valueOf(ca);
}
}
pointer 변수를 하나 두고
order의 앞 문자부터 찾아서 pointer 위치의 캐릭터와 자리바꾸고 pointer 이동
이렇게 하면 pointer의 앞쪽은 정렬된 상태이므로 다음 반복문에서는 앞쪽을 안봐도 됨
* order 함수를 만들어서 사용하는 방법도 있으나 정렬 빅오가 커서 성능 낮음
* HashTable (또는 char[26])으로 알파벳 빈도수 체크하여 O(n)으로 하는 방법도 있음
-> Bucket Sort 사용 (이게 정석인듯)
class Solution {
public String customSortString(String order, String s) {
int[] ca = new int[26];
// s에 나온 전체 문자들의 빈도 체크
for(int i=0; i<s.length(); i++){
ca[s.charAt(i)-'a']++;
}
// order에 나온 문자들 먼저 순서대로 append
StringBuilder sb = new StringBuilder();
for(char c : order.toCharArray()){
while(ca[c-'a']-- > 0){
sb.append(c);
}
}
// 나머지 문자들 append
for(int i=0; i<ca.length; i++){
while(ca[i]-- > 0){
sb.append(Character.toString('a'+i));
}
}
return sb.toString();
}
}
300x250
반응형
'IT > 알고리즘' 카테고리의 다른 글
substring과 유사한 String 생성자 (LeetCode 2390) (0) | 2023.09.12 |
---|---|
set에서 add()의 리턴값을 bool로 사용하기 (LeetCode 219) (1) | 2023.08.29 |
[프로그래머스] 문자열 계산하기, 인덱스 바꾸 (0) | 2023.06.28 |
[프로그래머스] 피자 나눠 먹기(3), 중앙값 구하기 (0) | 2023.06.21 |
프로그래머스 Lv.0 최댓값 만들기(2) (0) | 2023.05.24 |