File tree Expand file tree Collapse file tree 5 files changed +118
-0
lines changed
best-time-to-buy-and-sell-stock
encode-and-decode-strings
implement-trie-prefix-tree Expand file tree Collapse file tree 5 files changed +118
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ /* *
3+ * 시간 : O(n) 공간 : O(1)
4+ * 풀이
5+ * lastIndex - 1부터 0까지 조회하면서 가장높은값(maxPrice) 에서 현재값(price[i])의 차(currentProfit)를 구한다.
6+ * profit 과 currentProfit중 더 높은값이 profit.
7+ * maxPrice와 prices[i]중 더 높은값이 maxPrice가 된다.
8+ * */
9+ fun maxProfit (prices : IntArray ): Int {
10+ var profit = 0
11+ var maxPrice = prices[prices.lastIndex]
12+ for (i in prices.lastIndex - 1 downTo 0 ) {
13+ val currentProfit = maxPrice - prices[i]
14+ profit = max(profit, currentProfit)
15+ maxPrice = max(maxPrice, prices[i])
16+ }
17+
18+ return profit
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+
3+ fun encode (strs : List <String >): String {
4+ return strs.joinToString(separator = " :;" ) {
5+ if (it == " :" ) {
6+ " ::"
7+ } else {
8+ it
9+ }
10+ }
11+ }
12+
13+ fun decode (str : String ): List <String > {
14+ return str
15+ .replace(" ::" , " :" )
16+ .split(" :;" )
17+ }
18+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+
3+ /* *
4+ * 시간 : O(n*wlogw), 공간 : O(n*w)
5+ * 풀이
6+ * 1. strs를 한개씩 조회하며 strs[i]를 정렬한 값을 key값, value값은 list(strs[i])형태로 추가한다.
7+ * 2. return 형태에 맞게 map의 value만 뽑아낸다.
8+ * */
9+ fun groupAnagrams (strs : Array <String >): List <List <String >> {
10+ val map = mutableMapOf<String , MutableList <String >>()
11+ strs.forEach {
12+ val key = it.toCharArray()
13+ .sortedArray()
14+ .joinToString(" " )
15+ map[key] = map.getOrElse(key) { mutableListOf () }
16+ .apply { add(it) }
17+ }
18+ return map.map { it.value }
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ class Node () {
2+ val map = mutableMapOf<Char , Node ?>()
3+ var isEnd = false
4+ }
5+
6+ class Trie () {
7+ /* * insert, search, startWith 시간 복잡도 : O(n) * */
8+ val rootNode = Node ()
9+ fun insert (word : String ) {
10+ var currentNode = rootNode
11+ word.forEach { char ->
12+ if (currentNode.map[char] == null ) {
13+ currentNode.map[char] = Node ()
14+ }
15+ currentNode = currentNode.map[char]!!
16+ }
17+ currentNode.isEnd = true
18+ }
19+
20+ fun search (word : String ): Boolean {
21+ var currentNode = rootNode
22+ word.forEach { char ->
23+ if (currentNode.map[char] == null ) {
24+ return false
25+ } else {
26+ currentNode = currentNode.map[char]!!
27+ }
28+ }
29+ return currentNode.isEnd
30+ }
31+
32+ fun startsWith (prefix : String ): Boolean {
33+ var currentNode = rootNode
34+ prefix.forEach { char ->
35+ if (currentNode.map[char] == null ) {
36+ return false
37+ } else {
38+ currentNode = currentNode.map[char]!!
39+ }
40+ }
41+ return true
42+ }
43+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ /* *
3+ * 시간 : O(s^2*w), 공간 : O(s)
4+ * */
5+ fun wordBreak (s : String , wordDict : List <String >): Boolean {
6+ val dp = BooleanArray (s.length + 1 )
7+ dp[0 ] = true
8+ for (i in 1 .. s.length) {
9+ val subS = s.substring(0 , i)
10+ val endWord = wordDict.firstOrNull { subS.endsWith(it) }
11+ if (endWord != null ) {
12+ dp[i] = dp[i - endWord.length]
13+ }
14+ }
15+ return dp[s.length]
16+ }
17+ }
You can’t perform that action at this time.
0 commit comments