如何判断你是不是进了真国企?
而评论区第一条就是反驳的,“一眼假,明明这是银行才会有的奇葩规定,国企哪有这事儿。”本来我都信了他的邪。
又有人跳出来补充,“副处级以上,或者涉密人员才收”这就很合理了。
也有网友才不管这么多的,“说到底,不加班的才是真国企,其他都是假的。”默默给你点个赞,你是最通透的。
最后,大佬出来说话了,“真国企得满足这几个条件:一是接收你的人事档案,不是随便一个人才市场就能存放的;二是得是国有独资的;三是有企业年金。”你字多,就信你了。
看了一圈下来,大家说法都有点不一样,可能确实没有统一的标准,网友们的说法当个参考就好。但话又说回来,工作福利和个人成长符合我们的期望,就OK了,不是吗?
给定一个字符串 (s) 和一个字符模式 (p),实现一个支持 '?' 和 '*' 的通配符匹配。
'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
动态规划是解决此类问题的一个有效方法。我们可以使用一个二维数组 dp 来存储中间结果,其中 dp[i][j] 表示 s 的前 i 个字符和 p 的前 j 个字符是否能够匹配。
初始化:dp[0][0] = true,因为两个空字符串是可以匹配的。接下来,对于 p 的前 j 个字符如果都是 *,那么 dp[0][j] = true。
状态转移:
如果 p[j - 1] == s[i - 1] || p[j - 1] == '?',则 dp[i][j] = dp[i - 1][j - 1]。
如果 p[j - 1] == '*',则 dp[i][j] = dp[i][j - 1] || dp[i - 1][j]。dp[i][j - 1] 表示 * 匹配空字符串,dp[i - 1][j] 表示 * 匹配至少一个字符。
最终答案为 dp[s.length()][p.length()]。
public class Solution {public boolean isMatch(String s, String p) {boolean[][] dp = new boolean[s.length() + 1][p.length() + 1];dp[0][0] = true;for (int j = 1; j <= p.length(); j++) {if (p.charAt(j - 1) == '*') {dp[0][j] = dp[0][j - 1];}}for (int i = 1; i <= s.length(); i++) {for (int j = 1; j <= p.length(); j++) {if (p.charAt(j - 1) == s.charAt(i - 1) || p.charAt(j - 1) == '?') {dp[i][j] = dp[i - 1][j - 1];} else if (p.charAt(j - 1) == '*') {dp[i][j] = dp[i][j - 1] || dp[i - 1][j];}}}return dp[s.length()][p.length()];}}
function isMatch(s, p) {let dp = Array(s.length + 1).fill(false).map(() => Array(p.length + 1).fill(false));dp[0][0] = true;for (let j = 1; j <= p.length; j++) {if (p[j - 1] === '*') {dp[0][j] = dp[0][j - 1];}}for (let i = 1; i <= s.length; i++) {for (let j = 1; j <= p.length; j++) {if (p[j - 1] === s[i - 1] || p[j - 1] === '?') {dp[i][j] = dp[i - 1][j - 1];} else if (p[j - 1] === '*') {dp[i][j] = dp[i][j - 1] || dp[i - 1][j];}}}return dp[s.length][p.length];}
package mainfunc isMatch(s string, p string) bool {dp := make([][]bool, len(s)+1)for i := range dp {dp[i] = make([]bool, len(p)+1)}dp[0][0] = truefor j := 1; j <= len(p); j++ {if p[j-1] == '*' {dp[0][j] = dp[0][j-1]}}for i := 1; i <= len(s); i++ {for j := 1; j <= len(p); j++ {if p[j-1] == s[i-1] || p[j-1] == '?' {dp[i][j] = dp[i-1][j-1]} else if p[j-1] == '*' {dp[i][j] = dp[i][j-1] || dp[i-1][j]}}}return dp[len(s)][len(p)]}
以 s = "adceb" 和 p = "*a*b" 为例,按照上述算法步骤执行,可以得到结果 true。
测试代码可以根据上述实现直接运行,以验证算法的正确性。
扫描下方二维码,购买《ChatGPT实战课程》 送ChatGPT独享账号!
课程包含超多ChatGPT前沿玩法,帮助大家熟练掌握ChatGPT!