• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

siyqbpscvhi3232.png

这个问题的意思是给一个字符串S和一个匹配的字符串p,判断两个字符串是否匹配。特别的是会有。和*在P字符串中。表示您可以替换任何字符,*表示您可以重复前面的字符任意次(0次也是可以接受的)。

大意是,对于P的a*,比如an *,我们需要找出它在S字符串中对应了多少个A。然后我们需要划掉原字符串中匹配的字符,然后运行下面的字符串,也就是递归。

这个想法是基于*。在P中把*和前一个字符作为一个整体,看有多少个匹配的S对应于前一个字符。

考虑递归,要考虑最后的情况。

如果p为空,那么s为空且为真,s不为空且为假。

如果p的长度为1,那么只有s的长度为1且与p相同才会返回true,否则返回false。

如果p的长度不是1,那么有两种情况:

首先,如果当前两位数不是字符*,那么比较S和P的第一位,如果相同,递归删除S和P的第一位,如果不同,返回false。比如S是abc,P是acd,因为第一名是一样的,所以只要对比bc和cd就可以了。

第二,p的前两位是一个字符*。在这种情况下,我们可以删除s之前的任何位和p星号之前的字符。举个例子,如果S是aaaaab,P的前两位是a*,那么S前面的所有A都要删除。

当然,删除任意数量的A都需要枚举。比如会出现以下情况:S是aaaaab,P,P是a*aab。那么你不能删除所有的A而看不到a*,所以你必须递归地删除任意数量的A。

公共类Le10 {

public boolean isMatch(字符串s,字符串p) {

if(p.isEmpty())返回s . isempty();//如果P为空,那么S必须为空

if(p.length()==1)返回s.length()==1 (p.charAt(0)==' . '| | p . charat(0)==s . charat(0));//比较第一个字符

if(p.charAt(1)!='*'){

if(s.isEmpty())返回false

else return (p.charAt(0)==' . '| | p . charat(0)==s . charat(0))is match(s . substring(1),p . substring(1));

}

而(!s.isEmpty() (p.charAt(0)==' . '|| p.charAt(0)==s.charAt(0))){

if(isMatch(s,p.substring(2)))返回true

s=s . substring(1);

}

返回isMatch(s,p . substring(2));

}

公共静态void main(String[] args){

Le10测试=新Le10();

system . out . println(test . is match(' aab ',' c * a * b '));

}

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now