문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
두개의 문자열이 주어지고, 공통의 부분 문자열이 있는지 확인해라. 부분 문자열은 한 개의 문자만큼 작다.
s1 = "and"
s2 = "art"
공통 부분 문자열 a를 공유하고 있다.
s1 = "be"
s2 = "cat"
부분 문자열을 공유하고 있지 않다.
twoStrings 함수를 완성해라.
twoStrings 함수는 아래와 같은 매개변수를 가지고 있다.
주어진 문자열을 그대로 사용해 부분 문자열을 비교하니 타임아웃에 걸렸다.
그래서 해당 문자의 개수를 반환하는 메소드를 만들어 문제를 해결했다. 해당 메소드는 Anagram과 Making 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;
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;
}