leetcode 140 주 경기 네 번 째 문제 5086. 서로 다른 문자 의 최 자식 서열

문자열 text 에서 사전 순서에 따라 가장 작은 하위 서열 을 배열 합 니 다. 이 하위 서열 은 text 의 모든 다른 문 자 를 한 번 포함 합 니 다.예제 1: 입력: "cdadabcc" 출력: "adbc"
예제 2: 입력: "abcd" 출력: "abcd"
예제 3: 입력: "ecbacba" 출력: "eacb"
예제 4: 입력: "leetcode" 출력: "letcod"
귀 찮 습 니 다. 이번 주 경기 문 제 는 매우 느리게 풀 었 습 니 다. 이 문 제 는 상위 권 에 있 는 자바 코드 libofeng 을 풀 지 못 했 습 니 다. 뜻 을 이해 한 후에 자신 이 알고리즘 을 썼 습 니 다. 사실은 문제 의 뜻 이 매우 간단 합 니 다. 가장 먼저 끝 난 자 모 를 찾 았 습 니 다. 그리고 이 단락 에서 가장 작은 자 모 는 바로 첫 번 째 자모 입 니 다. 예 를 들 어 bcdgabcd 가 가장 먼저 끝 난 것 은 'g' 이 고 그 전에 가장 작은 것 은 'b' 입 니 다.그래서 첫 번 째 는 반드시 'b' 이다.그리고 그 다음 문자열 코드 를 옮 겨 다 니 면서
    public String smallestSubsequence(String text) {
		if (text.isEmpty())
			return "";
		int[] zimuN = new int[26];
		for (int i = 0; i < text.length(); i++)
			zimuN[text.charAt(i) - 'a']++;
		char minChar = 'z';
		int minIndex = 0;
		for (int i = 0; i < text.length(); i++) {
			if (text.charAt(i) < minChar) {
				minChar = text.charAt(i);
				minIndex = i;
			}
			if (--zimuN[text.charAt(i)-'a'] == 0) {
				return minChar
						+ smallestSubsequence(text.substring(minIndex)
								.replaceAll(minChar + "", ""));
			}
		}
		return "";
	}

좋은 웹페이지 즐겨찾기