일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA
- Java
- spring boot
- priority_queue
- List
- dfs
- map
- string
- 큐
- scanner
- javascript
- GC로그수집
- union_find
- sql
- 힙덤프
- math
- CSS
- 스프링부트
- Union-find
- 리소스모니터링
- date
- Calendar
- BFS
- html
- NIO
- 스택
- set
- alter
- Properties
- deque
- Today
- Total
목록알고리즘/String (9)
매일 조금씩
이 또한 중간 확장법을 사용해서문자열의 문자하나를 기준점으로 찍으면서각각에 홀수, 짝수로 나눠서 팰린드롬 갯수를 카운트 했다. class Solution { private int count = 0; // 팰린드롬 수 public int countSubstrings(String s){ if(s.length() = 0 && end
이것 또한 투포인터를 사용해야하는 문제이다.다만 최대 길이의 palindrome 문자열을 찾아야한다. 난두가지 방법을 생각했다.첫번째 문자부터 마지막 문자를 가리키는 포인터를 앞당기며 찾음. (가장자리 -> 가운데 방향으로 palindrome 탐색)문자 하나씩을 기준으로 삼고 양쪽으로 확장하며 찾음. (가운데 -> 가장자리 방향으로 palindrome 탐색)1번은 시간복잡도 O(n^3), 2번은 시간복잡도 O(n^2)이다.따라서, 2번의 중심확장방식이 더 효율적이다. 팰린드롬(palindrome) 문제는 '좌우대칭'이라는 팰린드롬의 특성에 따라, 시간복잡도를 줄이기 위해 최대길이 문제는 가운데 기준점을 찍으며 찾아가는 2번 방식이 효율적이다. 1번 방식)class Solution { public S..
20. Valid Parentheses 문제를 풀때는 괄호가 선입후출로 다 닫히는지 보는문제였기 때문에 Stack을 사용했다.그러나 이문제는 Palindrome 문제로문자, 기호, 숫자 등이 포함된 문자열에서 문자와 숫자가 대칭을 이루는지 확인하는 문제이다. 따라서 Stack을 사용하기보다 투 포인터로 가장자리부터 문자와 숫자를 만나면 두 포인터가 가리키는 문자/숫자가 일치하는지 확인하는 방식으로 진행하는 것이 공간복잡도는 O(1)이고, 시간복잡도는 O(N) 으로 효율적이다. class Solution { public boolean isPalindrome(String s) { if(s.isEmpty()){ return true; } int l..
Stack 사용하면 됨! class Solution { public boolean isValid(String s) { Stack stack = new Stack(); for(int i = 0; i
anagram 문제는 char[]로 만들어서 알파벳순으로 재정렬한 후, 찾는 것이 핵심이다.여기선 HashMap을 사용해서 재정렬된 단어를 키로 해서 그단어의 anagram인 것들을 value에 넣는 방법을 사용했다. class Solution { public List> groupAnagrams(String[] strs) { Map> map = new HashMap(); for(String word : strs){ // 단어를 알파벳순으로 재정렬 char[] chars = word.toCharArray(); Arrays.sort(chars); String sorted = new String(ch..
anagram 이란, 다른 단어가 기존 단어의 알파벳들로만 이루어진 것을 뜻하는 말이다. 난 HashMap을 사용해서 풀었지만, 간단히 Arrays.equals()로도 풀수 있었다. class Solution { public boolean isAnagram(String s, String t) { Map origin = new HashMap(); if(s.length() != t.length()) return false; for(char sc: s.toCharArray()){ origin.put(sc, origin.getOrDefault(sc, 0) + 1); } for(char tc: t.toCharA..