问题描述
请实现一个函数用来匹配包含’.‘和’*'的正则表达式。
模式中的字符’.'表示任意一个字符,而 '*'表示它前面的字符可以出现任意次(含0次)。
输入字符串s和正则表达式p,输出s和p是否匹配。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String p = scanner.nextLine();
System.out.println(isMatch(s, p));
}
public static boolean isMatch(String s, String p) {
if (s.length() == 0) {
if (p.length() == 0) {
return true;
} else {
if (p.length()%2 == 0) {
for (int i = 1; i < p.length(); i = i + 2) {
if (p.charAt(i)!='*') return false;
}
return true;
} else {
return false;
}
}
}
if (p.length() == 0) return false;
char a = s.charAt(0);
char b = p.charAt(0);
char c = 'a';
if (p.length() == 1) {
return (s.length() == 1 && (a == b || b == '.'));
} else {
c = p.charAt(1);
if (c != '*') {
if (a == b || b == '.') {
return isMatch(s.substring(1),p.substring(1));
} else {
return false;
}
} else {
if (a == b || b == '.') {
return isMatch(s.substring(1), p) || isMatch(s, p.substring(2));
} else {
return isMatch(s, p.substring(2));
}
}
}
}
}