国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

leetcode-動態(tài)規(guī)劃-44-通配符匹配

這篇具有很好參考價值的文章主要介紹了leetcode-動態(tài)規(guī)劃-44-通配符匹配。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目

給你一個輸入字符串 (s) 和一個字符模式 § ,請你實現(xiàn)一個支持 ‘?’ 和 ‘’ 匹配規(guī)則的通配符匹配:
‘?’ 可以匹配任何單個字符。
'
’ 可以匹配任意字符序列(包括空字符序列)。
判定匹配成功的充要條件是:字符模式必須能夠 完全匹配 輸入字符串(而不是部分匹配)。

示例 1:

輸入:s = “aa”, p = “a”
輸出:false
解釋:“a” 無法匹配 “aa” 整個字符串。
示例 2:

輸入:s = “aa”, p = ""
輸出:true
解釋:'
’ 可以匹配任意字符串。
示例 3:

輸入:s = “cb”, p = “?a”
輸出:false
解釋:‘?’ 可以匹配 ‘c’, 但第二個 ‘a(chǎn)’ 無法匹配 ‘b’。

提示:

0 <= s.length, p.length <= 2000
s 僅由小寫英文字母組成
p 僅由小寫英文字母、‘?’ 或 ‘*’ 組成

思路

這個問題可以使用動態(tài)規(guī)劃來解決,其中 dp[i][j] 表示字符串 s 的前 i 個字符和模式 p 的前 j 個字符是否匹配。

解題思路如下:

  1. 初始化動態(tài)規(guī)劃表 dp,大小為 (len(s) + 1) x (len(p) + 1)。

  2. 初始化 dp[0][0]True,表示空字符串與空模式匹配。

  3. 對于模式 p 中的 *,因為 * 可以匹配任意字符序列(包括空字符序列),所以可以將 dp[0][j] 設(shè)置為 dp[0][j - 1],即模式中的 * 可以匹配空字符串。

  4. 開始動態(tài)規(guī)劃過程,遍歷 dp 表格,其中 dp[i][j] 的計算取決于以下情況:

    • 如果 s[i - 1]p[j - 1] 相等,或者 p[j - 1]?,則 dp[i][j] = dp[i - 1][j - 1]
    • 如果 p[j - 1]*,則 dp[i][j] = dp[i - 1][j] || dp[i][j - 1]。這表示 * 可以匹配多個字符或者空字符串。
  5. 最終,dp[len(s)][len(p)] 的值就表示整個字符串 s 是否與模式 p 完全匹配。

這個算法的時間復(fù)雜度是 O(m * n),其中 m 是字符串 s 的長度,n 是模式 p 的長度。文章來源地址http://www.zghlxwxcb.cn/news/detail-660640.html

代碼

object Solution {
    def isMatch(s: String, p: String): Boolean = {
        val m = s.length
        val n = p.length
        val dp = Array.ofDim[Boolean](m + 1, n + 1)
        dp(0)(0) = true

        for (j <- 1 to n) {
            if (p(j - 1) == '*') {
                dp(0)(j) = dp(0)(j - 1)
            }
        }

        for (i <- 1 to m) {
            for (j <- 1 to n) {
                if (s(i - 1) == p(j - 1) || p(j - 1) == '?') {
                    dp(i)(j) = dp(i - 1)(j - 1)
                } else if (p(j - 1) == '*') {
                    dp(i)(j) = dp(i - 1)(j) || dp(i)(j - 1)
                }
            }
        }

        dp(m)(n)
    }

    def main(args: Array[String]): Unit = {
        val s1 = "aa"
        val p1 = "a"
        println(isMatch(s1, p1))  // 輸出 false

        val s2 = "aa"
        val p2 = "*"
        println(isMatch(s2, p2))  // 輸出 true

        val s3 = "cb"
        val p3 = "?a"
        println(isMatch(s3, p3))  // 輸出 false
    }
}

到了這里,關(guān)于leetcode-動態(tài)規(guī)劃-44-通配符匹配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【動態(tài)規(guī)劃】通配符匹配與正則表達式匹配

    【動態(tài)規(guī)劃】通配符匹配與正則表達式匹配

    題目描述: 給你一個輸入字符串 (s) 和一個字符模式 § ,請你實現(xiàn)一個支持 ‘?’ 和 ‘*’ 匹配規(guī)則的通配符匹配: ‘?’ 可以匹配任何單個字符。 ‘*’ 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要條件是:字符模式必須能夠 完全匹配 輸入字符串(而

    2024年02月07日
    瀏覽(36)
  • 【算法題】44. 通配符匹配

    給你一個輸入字符串 (s) 和一個字符模式 (p) ,請你實現(xiàn)一個支持 \\\'?\\\' 和 \\\'*\\\' 匹配規(guī)則的通配符匹配: \\\'?\\\' 可以匹配任何單個字符。 \\\'*\\\' 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要條件是:字符模式必須能夠 完全匹配 輸入字符串(而不是部分匹配)。 ?

    2024年01月25日
    瀏覽(19)
  • Spring Cloud Foundry上使用通配符模式匹配進行的安全繞過漏洞 CVE-2023-20873

    Spring Cloud Foundry上使用通配符模式匹配進行的安全繞過漏洞 CVE-2023-20873

    背景:公司項目掃描到 Spring Cloud Foundry上使用通配符模式匹配進行的安全繞過漏洞 CVE-2023-20873 CVE-2023-20873:在Cloud Foundry上使用通配符模式匹配進行的安全繞過 高風(fēng)險 | 2023年5月18日 | CVE-2023-20873 在Spring Boot版本3.0.0 - 3.0.5, 2.7.0 - 2.7.10, 2.6.0 - 2.6.14, 2.5.0 - 2.5.14以及舊版支持的版本

    2024年02月09日
    瀏覽(23)
  • Linux詳解:通配符

    Linux詳解:通配符

    Linux是一款開源操作系統(tǒng),其靈活性和可定制性一直受到開發(fā)者的喜愛和追捧。而且,Linux在文件管理方面提供了豐富的功能,例如通配符,它是一種用于匹配文件名的特殊字符。通配符在Linux中可以幫助我們更加方便和快捷地查找和操作文件。本文將介紹Linux中常用的通配符

    2024年02月09日
    瀏覽(56)
  • Elasticsearch 通配符查詢

    通配符查詢(wildcard query) 匹配字段被通配符表達式(沒有被分析)匹配的文檔。支持的通配符為*(匹配任意字符序列,包括空字符序列)以及?(匹配任意單字符)。注意,此查詢可能會很慢,它需要迭代許多字段值。為了防止極慢的通配符匹配,通配符字段值不能以一個

    2024年02月11日
    瀏覽(28)
  • 活用 命令行通配符

    活用 命令行通配符

    本文是對 阮一峰老師 命令行通配符教程 [1] 的學(xué)習(xí)與記錄 通配符早于正則表達式出現(xiàn),可以看作是原始的正則表達式. 其功能沒有正則那么強大靈活,而勝在簡單和方便. - 字符 切回上一個路徑/分支 如圖: !! 代表上一個命令, 如圖: [Linux中“!\\\"的神奇用法](https://www.cnblogs.com/bian

    2024年02月10日
    瀏覽(25)
  • 泛型的通配符

    泛型的通配符

    類型的上界決定了泛型的范圍。 我們發(fā)現(xiàn)指定了泛型的上界為數(shù)值類Number時,傳入Boolean類型就會報錯。 如果沒有指定類型的邊界,可以認(rèn)可 T extends Object,當(dāng)指定了某個類型為上界,那么只接受某類型本身和子類型作為E的類型實參 我們要實現(xiàn)一個類去找數(shù)組的一個的最大值

    2023年04月08日
    瀏覽(21)
  • 【類型通配符】

    為了表示各種泛型List的父類,可以使用類型通配符 類型通配符:? List?:表示元素類型未知的List,它的元素可以匹配任何的類型 這種帶通配符的List僅表示它是各種泛型List的父類,并不能把元素添加到其中 如果不想讓List?是任何泛型的父類,只想讓它代表某一類泛型List的父

    2024年02月17日
    瀏覽(58)
  • 16-字符串通配符

    題目 問題描述: 在計算機中,通配符一種特殊語法,廣泛應(yīng)用于文件搜索、數(shù)據(jù)庫、正則表達式等領(lǐng)域?,F(xiàn)要求各位實現(xiàn)字符串通配符的算法。 要求: 實現(xiàn)如下2個通配符: *:匹配0個或以上的字符(注:能被*和?匹配的字符僅由英文字母和數(shù)字0到9組成,下同) ?:匹配

    2024年02月15日
    瀏覽(24)
  • 了解java中的通配符“?“

    了解java中的通配符“?“

    目錄 通配符的作用 ????????先看一段代碼 ????????用通配符\\\"?\\\"后,代碼變化 ????????結(jié)論 通配符上界? 通配符下界 對通配符上下界的注釋理解及其練習(xí)代碼?? 簡記: ? ?用于在泛型的使用,即為通配符. 在Java中,通配符(wildcard)主要用于泛型編程,用于表示一個

    2024年02月10日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包