[HackerRank] Two Characters

아르당·2023년 12월 21일
0

HackerRank

목록 보기
53/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

문자열이 주어지고, 문자들을 문자열이 두 개씩 번갈아 나오는 문자로 만들어질때까지 제거해라. 특정 문자를 제거할 때, 해당 문자를 모두 지워야한다. 두 개의 문자가 번갈아 나오는 가장 긴 문자열을 찾아라.

Example

s = 'abaacdadb'

a를 삭제하면, bcdbd가 남는다. 지금, 문자 c를 제거하면 문자열 길이가 4인 bdbd가 남는다. b 또는 d 중 하나를 제거하면 유효한 문자열이 생성되지 않는다. 4를 반환해라.
문자열 s가 주어지고, 문자가 번갈아 나오는 가장 긴 문자열 t로 변환해라. 문자열 t의 길이를 반환해라. 만약 문자열 t가 변환되지 않으면 0을 반환해라.

Function Description

alternate 함수를 완성해라.
alternate 함수는 아래와 같은 매개변수를 가지고 있다.

  • String s: 문자열

Returns

  • int: 가장 긴 문자열의 길이 또는 변환이 안되면 0

Constraints

  • 1 <= s의 길이 <= 1000
  • s[i] ∈ ascii[a-z]

All Code

public static int alternate(String s) {
	return maxLength(s);
}

public static int maxLength(String s){
	Set<Character> uniqueCharacters = new HashSet<>();

	for(char c : s.toCharArray()){
		uniqueCharacters.add(c);
	}

	char[] uniqueArray = new char[uniqueCharacters.size()];
	int index = 0;

	for(char c : uniqueCharacters){
		uniqueArray[index++] = c;
	}

	int stringLength = 0;

	for(int i = 0; i < uniqueArray.length - 1; i++){
		for(int j = i + 1; j < uniqueArray.length; j++){
			char leftChar = uniqueArray[i];
			char rightChar = uniqueArray[j];
			StringBuilder sb = new StringBuilder();

			for(char c : s.toCharArray()){
				if(c == leftChar || c == rightChar){
					sb.append(c);
				}
			}

			if(isValidString(sb.toString())){
				stringLength = Math.max(stringLength, sb.length());
			}
		}
	}

	return stringLength;
}

public static boolean isValidString(String s){
	for (int i = 1; i < s.length(); i++) {
		if (s.charAt(i) == s.charAt(i - 1)) {
			return false;
		}
	}

	return true;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글