leetcode-44-通配符匹配

通配符匹配

题面

leetcode题目

给定一个字符串 \(s\) 和一个字符模式 \(p\) ,实现一个支持 '?$ 和 \('*'\) 的通配符匹配。

\('?'\) 可以匹配任何单个字符。
\('*'\) 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。

说明:
* \(s\) 可能为空,且只包含从 \(a-z\) 的小写字母。
* \(p\) 可能为空,且只包含从 \(a-z\) 的小写字母,以及字符 \(?\) 和 \(*\)

example-1

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

example-2

输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。

阅读更多

leetcode-629-K个逆序对数组

K个逆序对数组

题面

leetcode题目

给出两个整数 \(n\) 和 \(k\),找出所有包含从 \(1\) 到 \(n\) 的数字,且恰好拥有 \(k\) 个逆序对的不同的数组的个数。

逆序对的定义如下:对于数组的第\(i\)个和第\(j\)个元素,如果满\(i < j\)且 \(a[i] > a[j]\),则其为一个逆序对;否则不是。

由于答案可能很大,只需要返回 答案 mod \(10^9 + 7\) 的值。

example-1

输入: \(n = 3\), \(k = 0\)
输出: \(1\)
解释:
只有数组 \([1,2,3]\) 包含了从1到3的整数并且正好拥有 \(0\) 个逆序对。

example-2

输入: \(n = 3\), \(k = 1\)
输出: \(2\)
解释:
数组 \([1,3,2]\)\([2,1,3]\) 都有 \(1\) 个逆序对。

阅读更多

leetcode-10-正则表达式匹配

正则表达式匹配

题面

leetcode题目

给你一个字符串 \(s\) 和一个字符规律 \(p\),请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

  • '.' 匹配任意单个字符
  • '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖整个字符串\(s\)的,而不是部分字符串。

example-1

输入:s = "aa" p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

example-2

输入:s = "aa" p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

阅读更多

leetcode-664-奇怪的打印机

奇怪的打印机

题面

leetcode题目

有台奇怪的打印机有以下两个特殊要求:
打印机每次只能打印由 同一个字符 组成的序列。
每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。
给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。

example

输入:s = "aaabbb"
输出:2
解释:首先打印 "aaa" 然后打印 "bbb"。

阅读更多