剑指 Offer 19. 正则表达式匹配
https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/
func isMatch(s string, p string) bool { n:=len(s);m:=len(p) vis:=make([][]bool,0,n+1) //n+1是为了处理空串 for i:=0;i<n+1;i++{ vis=append(vis,make([]bool,m+1)) } //fmt.Println(vis) for i:=0;i<=n;i++{ for j:=0;j<=m;j++{ if j==0&&i==0{ vis[i][j]=true }else if j==0{ vis[i][j]=false }else{ //第一种情况,p[i-1]==s[j-1]||p[j-1]=. if p[j-1]!='*'{ if i>0&&(s[i-1]==p[j-1]||p[j-1]=='.'){ //注意条件判断加上() vis[i][j]=vis[i-1][j-1] } }else{ //第二种情况p[j-1]=*&&*是不匹配s的任何字符,即0次的情况 if j>=2{ vis[i][j]=vis[i][j]||vis[i][j-2] } //第三种情况p[j-1]==*&&匹配n次的情况 if i>=1&&j>=2&&(s[i-1]==p[j-2]||p[j-2]=='.'){//注意条件判断加上() vis[i][j]=vis[i][j]||vis[i-1][j] //这里为啥用||,是在第二种满足的情况下,也会走到这个逻辑 } } } } } return vis[n][m] }
等风起的那一天,我已准备好一切