一、题目如下:
————————–
Write a parser for a simplified regular expression
On an alphabet set [a-z], a simplified regular expression is much simpler than the normal regular expression.
It has only two meta. characters: '.' and '*'.
'.' — exact one arbitrary character match.
'*' — zero or more arbitrary character match.
————————–
举个例子,表达式ab.*d 能匹配'abcd', 'abccd', 'abad'. 不能匹配'abc', ' '(空字符串),'abd'.
二、解法:
解析给定的表达式
生成对应的NFA(Nondeterministic Finite Automation)
NFA转化为DFA(Deterministic Finite Automation)
利用DFA判断输入字符串
三、相关代码:
FiniteAutomata.java 和State.java,随手写写,请选择性参考。
FiniteAutomata.java
package parser;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IteraTor;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
public class FiniteAutomata {
private State start;
private final static char[] inputs;
static {
inputs = new char[26];
for (char i = 0; i < 26; i++){
inputs[i] = (char)('a' + i);
}
}
更多免费相关学习经验请访问:Tore_m_1206686_21115_1_1.html”>http://www.shangxueba.com/sTore_m_1206686_21115_1_1.html
没有人陪你走一辈子,所以你要适应孤独,