문제
https://leetcode.com/problems/find-all-anagrams-in-a-string/
s문자열이 주어졌을 때, p문자열이 모두 들어있는 모든 첫번째 인덱스를 return해준다.
풀이
1. p의 길이가 s의 길이보다 긴 경우, return 해준다.
2. 먼저 알파벳의 크기만큼 s와 p 배열을 만들어준다.
3. 문자의 길이가 정해져있으니까 왼쪽, 오른쪽 ++ 해주어 숫자를 비교해준다..
Java Code
class Solution {
public List<Integer> findAnagrams(String s, String p) {
if (p.length() > s.length()) return new ArrayList<>();
int[] sHash = new int[26];
int[] pHash = new int[26];
for (int i = 0; i < p.length(); i++) {
pHash[p.charAt(i) - 'a']++;
sHash[s.charAt(i) - 'a']++;
}
int left = 0, right = p.length();
List<Integer> ans = new ArrayList<>();
while (right < s.length()) {
if (Arrays.equals(sHash, pHash)) ans.add(left);
char acquire = s.charAt(right);
sHash[acquire - 'a']++;
char discard = s.charAt(left);
sHash[discard - 'a']--;
left++; right++;
}
// 두 배열이 같은 경우 left값을 정해준다.
if (Arrays.equals(sHash, pHash)) ans.add(left);
return ans;
}
}'Algorithm > LeetCode' 카테고리의 다른 글
| [LeetCode 299.] Bulls and Cows (Java) (0) | 2023.02.13 |
|---|---|
| [LeetCode 844.] Backspace String Compare (Java) (0) | 2023.02.13 |
| [LeetCode 98.] Validate Binary Search Tree (Java) (0) | 2023.02.06 |
| [LeetCode 142.] Linked List Cycle II (Java) (0) | 2023.01.30 |
| [LeetCode 278.] First Bad Version (Java) (0) | 2023.01.30 |




