코린이의 소소한 공부노트

[LeetCode/Medium] 438. Find All Anagrams in a String 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 438. Find All Anagrams in a String

무지맘 2023. 2. 21. 22:01

1. Input

1) String s

2) String p

 

2. Output

1) s의 부분 문자열 중 p의 애너그램의 시작 인덱스를 담은 List<Integer>

// 애너그램이란 문자를 재배열했을 때 다른 단어와 같게 되는 단어를 말한다.

 

3. Constraint

1) 1 <= s.length, p.length <= 3 * 10^4

2) sp는 영어 소문자로만 이루어져 있다.

 

4. Example

Input: s = "cbaebabacd", p = "abc" -> Output: [0,6]

설명:

- s.substring(0,3) == "cba"p의 애너그램이다.

- s.substring(6,9) == "bac“p의 애너그램이다.

 

5. Code

1) 첫 코드(2023/02/21)

List<Integer> answer = new ArrayList<Integer>();
char[] c = p.toCharArray();
Arrays.sort(c);
p = new String(c);
for(int i=0 ; i<=s.length()-p.length() ; i++){
    c = s.substring(i,i+p.length()).toCharArray();
    Arrays.sort(c);
    if(p.equals(new String(c))) answer.add(i);
}
return answer;

- 시간은 무지 오래 걸렸는데, 메모리 사용량은 준수한 편이었다. 직관적으로 푼거라 효율성이 많이 떨어진다.