iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

「上次樹的題目玩了不少,今天我們再來玩一些字串相關的題目吧!」

「夏天姐,字串的題目我們不是也做過不少了嗎?解法感覺就是那一些呀」菁菁打了個哈欠,有些不耐。

「那個⋯⋯其實我自己回家也做了不少練習,字串的題目對我現在應該算是容易了」

「這樣啊⋯⋯我知道了,那今天我們來練習一些比較不同的題目吧!」

夏天打開了 10. Regular Expression Matching

兩人看著題目,研究了好一段時間,實在不知道從何下手

「這題用 Kotlin 的話,我們可以作弊一下」夏天寫出一個顯然跟題目要求不同的答案

class Solution {
    fun isMatch(s: String, p: String) =
        p.toRegex().matches(s)
}

「讓兩位看這一題,主要是知道有正規表達式這個工具可以使用。我們再看看下一題」夏天打開了 20. Valid Parentheses 這個題目

「嗯⋯⋯這題可以利用剛剛講的正規表達式來處理嗎」菁菁和曉欣兩人陷入苦思。

「剛好不行喔,這一題乍看之下可以用正規表達式處理,但是實際上不行,必須要用 stack 資料結構處理。」

「咦?在 Kotlin 裡面怎麼宣告 stack 呢?」

「我們可以用 ArrayDeque 來建立類似 stack 的結構」

class Solution {
    fun isValid(s: String): Boolean {
        val deque = ArrayDeque<Char>()

        for (i in s.indices) {
            val character = s[i]
            println(character)
            if (character == '(' || character == '[' || character == '{')
            {
                deque.push(character)
                continue;
            }
            if (deque.isEmpty()) {
                return false;
            }
            when (character) {
                ')' -> if (deque.getFirst() == '(') {deque.pop()} else { return false }
                ']' -> if (deque.getFirst() == '[') {deque.pop()} else { return false }
                '}' -> if (deque.getFirst() == '{') {deque.pop()} else { return false }
                else -> return false
            }
        }
        if(!deque.isEmpty()){
            return false
        }
        return true
    }
}

「原來把字串當成像是陣列一樣使用,可以做到這種效果」曉欣說。

「沒錯」夏天說「可以用類似思路處理的題目還有 657. Robot Return to Origin 這題」

「這題我們就有辦法了!」兩人合力寫出解答

class Solution {
    fun judgeCircle(moves: String): Boolean {
        var x = 0
        var y = 0
        moves.forEach {
            when (it) {
                'U' -> y++
                'D' -> y--
                'R' -> x++
                'L' -> x--
            }
        }
        return x == 0 && y == 0
    }
}

「很棒!如何?字串的題目還是有很多不簡單的吧?」

「真的,我們太小看字串的題目了!謝謝夏天姐今天的指導」

「沒事的,今天的 leetcode 題目就先這樣,先把東西吃完要緊!」


上一篇
Day 14:再探樹狀結構:101. Symmetric Tree、965. Univalued Binary Tree
下一篇
Day 16:字串的練習成果:13、1480、2032
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言