[HackerRank] Two String

아르당·2024년 4월 30일
0

HackerRank

목록 보기
78/109
post-thumbnail

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

Problem

두개의 문자열이 주어지고, 공통의 부분 문자열이 있는지 확인해라. 부분 문자열은 한 개의 문자만큼 작다.

Example

s1 = "and"
s2 = "art"

공통 부분 문자열 a를 공유하고 있다.

s1 = "be"
s2 = "cat"

부분 문자열을 공유하고 있지 않다.

Function Description

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

  • String1: 문자열
  • String2: 문자열

Returns

  • String: YES 또는 NO

Constraints

  • s1과 s2는 ascii[a-z] 범위의 문자로 되어있다.
  • 1 <= p <= 10
  • 1 <= |s1|, |s2| <= 10^5

Solved

주어진 문자열을 그대로 사용해 부분 문자열을 비교하니 타임아웃에 걸렸다.
그래서 해당 문자의 개수를 반환하는 메소드를 만들어 문제를 해결했다. 해당 메소드는 AnagramMaking Anagram에서 사용한 메소드와 동일하다.

public static int[] getStringCount(String s){
	int[] count = new int[26];

	for(int i = 0; i < s.length(); i++){
		count[s.charAt(i) - 'a']++;
	}

	return count;
}

String flag를 선언하고 NO를 할당한다. 이후에 반복문을 통해 값을 변경할 때 사용한다. 그리고 getStringCount를 사용해서 s1과 s2의 문자열의 개수를 구하고 s1Count와 s2Count에 할당한다.

String flag = "NO";
int[] s1Count = getStringCount(s1);
int[] s2Count = getStringCount(s2);

반복문을 통해 각 문자가 문자열에 있는지 비교하고, if문을 통해 flag의 값을 YES로 변경한다. 이때 해당 문자열이 포함되어 있다면 반복문을 빠져나온다.

for(int i = 0; i < 26; i++){
	if(s1Count[i] > 0 && s2Count[i] > 0){
		flag = "YES";
		break;
	}
}

마지막으로 flag를 반환한다.

return flag;

All Code

public static String twoStrings(String s1, String s2) {
	String flag = "NO";
	int[] s1Count = getStringCount(s1);
	int[] s2Count = getStringCount(s2);
    
	for(int i = 0; i < 26; i++){
		if(s1Count[i] > 0 && s2Count[i] > 0){
			flag = "YES";
			break;
		}
	}

	return flag;
}

public static int[] getStringCount(String s){
	int[] count = new int[26];

	for(int i = 0; i < s.length(); i++){
		count[s.charAt(i) - 'a']++;
	}

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

0개의 댓글