public static int resolve2(String str, String reg) { char[] c1 = str.toCharArray(); char[] c2 = reg.toCharArray(); int i,j; for (i = 0,j = 0; i < c1.length && j < c2.length; ) { if (c1[i] == c2[j]) { i++; j++; } else { if (c2[j] == '?') { i++; j++; } else if (c2[j] == '*') { i++; j++; for (; i < c1.length && j < c2.length; ) { if (c1[i] == c2[j] && (i + 1 >= c1.length || c1[i + 1] != c2[j])) {//abcaabbcc a?????*c i++; j++; break; } else { i++; } } } else { i++; break; } } } //aabbccdd a*b*c??* //当匹配到最后一个dd与??后,退出外层for循环,但是匹配字符串还有一个星号没有匹配完,所以返回0 是不对的 //abcdddd abc*d? //也是一样,匹配字符串最后一个问号没有匹配完,返回0 是不对的 //abcdddd abc*d*d或者abc*d?d 返回0 是不对的 //abcdddea ab*d*ea 返回0 是不对的 if ((i == c1.length) && (j == c2.length)) { return 1; } else if (i == c1.length) { int flag=1; for (int k = j; k < c2.length; k++) { if (c2[k] != '*' && c2[k] != '?' ) { flag = (c2[k] == c1[c1.length - (c2.length - k)]) && flag == 1 ? 1 : 0;//当匹配到不是*或者?时,需要c1向前验证,若flag==1且验证正确,才继续flag=1 } } return flag; } return 0; }
点赞 1

相关推荐

12-11 23:05
武汉大学 Java
点赞 评论 收藏
分享
只因飞飞:今日首绷
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务