⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strmatch.java

📁 实现了《算法设计与分析》的一次课后题
💻 JAVA
字号:
import com.sun.org.apache.xpath.internal.operations.Bool;


public class strMatch {

	/**
	 * @param args
	 */
	private int currmat;
	private int maxmat;
	private int minmat;
	private int minlen;
	private String[] s;
	private String[][] f;
	private int match[][][];
	private int[] n;
	
	public static void main(String[] args) {
		

	}
public void search(int len){
	
	int[] p;
	
	if((currmat>maxmat||currmat==maxmat&&len<minlen)&&ok(len)){
		maxmat=currmat;
		minmat=s;
		minlen=len;
	}
	len++;
	if(len==1||s[len-1]!='*'){
		s[len]='?';
		if(check(len))search(len);
		s[len]='*';
		if(check(len))search(len);
	}
	
	for(int i=1;i<=p[len-1];i++){
		s[len]=cha[len-1][i].c;
		if(check(len))search(len);
	}
}

boolean check(int len){
	int i,j,t,k=0;
	currmat=0;
	
	int[] p;
	for(i=1;i<=n[0];i++){
		memset(match[len][i],0,sizeof(match[len][i]));
		if(len==1&&s[1]=='*')match[len][i][0]=1;
		for(j=1;j<f[i].length;j++)
			switch(s[len]){
			case'*':
			   for(t=0;t<=j;t++)
				   if(match[len-1][i][t]==1){match[len][i][j]=1;break;}
			   break;
			case'?':
				match[len][i][j]=match[len-1][i][j-1];
				break;
			default:
				if(s[len]==f[i][j-1])
					match[len][i][j]=match[len-1][i][j-1];
			break;
			}
		for(j=f[i].length;j>=1;j--)
			if(match[len][i][j]==1){
				k++;
				if(j==f[i].length)currmat++;
				break;
			}
	}
	if(k<maxmat||k==maxmat&&len>=minlen)return false;
	p[len]=0;
	for(i=1;i<=n[0];i++)
		for(j=1;j<=f[i].length-1;j++)
			if(match[len][i][j]==1)save(f[i][j],len);
	return true;
}

private boolean ok(int len) {
	int i,j,k,t;
	for(k=1;k<=len;k++)
		for(i=n[0]+1;i<=n[0]+n[1];i++){
		memset(match[k][i],0,sizeof(match[k][i]));
	if(s[1]=='*'&&k==1)match[k][i][0]=1;
	for(j=1;j<=f[i].length;j++)
		switch(s[k]){
		case'*':
			for(t=0;t<=j;t++)
				if(match[k-1][i][t]==1){match[k][i][t]=1;break;}
			break;
		case'?':
			match[k][i][j]=match[k-1][i][j-1];
			break;
			default:
				if(s[k]==f[i][j-1])match[k][i][j]=match[k-1][i][j-1];
			break;
		}
}
	for(i=n[0]+1;i<=n[0]+n[1];i++)
		if(match[len][i][f[i].length]==1)return false;
	return true;
	
}

public void readin()
{
	
		
	
}

private void save(String string, int len) {

	
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -