求算法高手

jeson5k 2012-11-26 10:00:49
dict已下内容
第一行 abc
第二行 aa,bb
内容
内容一 abcdef 包含了abc 为非法
内容二 aabbccdd 同时包含了aa bb 非法,只包含一个为合法
知道是AC多模式匹配,但是就不知道怎么实现,求高手给个实现...
...全文
233 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eviljordan 2012-11-27
  • 打赏
  • 举报
回复
public static void main(String[] args)
	{           
		String s1="abc";
		String s2="aa";
		String s3="bb";
		String str1="abcdef";
		String str2="aabbccdd";
		if(str1.contains(s1))
		{
			System.out.print("非法");
		}
		if(str2.contains(s2)&&str2.contains(s3))
		{
			System.out.print("非法");
		}
		if(str2.contains(s2)||str2.contains(s3))
		{
			System.out.print("合法");
		}
	}	
raistlic 2012-11-27
  • 打赏
  • 举报
回复
文本压缩算法里的字典压缩方法,可能会包含类似的查询问题的解决方案……
引用:
第一行 abc 第二行 aa,bb
大概思路如下: 如果有一棵字符组成的树, null - - a - a | - b - b 然后有一个 bitset,比如初始为 00 树里的每个叶子对应 bitset 里的一位, 当一个 string 从头走到尾,当遇到树中 null 下面那一层的字母的时候,触发一个 branch 的 match 检查, 如果一个 match 成功完成(一直走到了叶子),则把 bitset 里对应的 0 改为 1, 检查可以并行,就是说即使当前有一个 branch 的检查正在进行,每读一个 char 也要再察看一下 null 的下面那一层,看能不能触发一个新的 branch 的检查。 最后数 biset 里 1 的个数( 有专门的算法,binary rank,可以空间换时间,O(1) ),如果都是1,那么string非法 这是我的大体思路,不知道是不是可行。
jeson5k 2012-11-27
  • 打赏
  • 举报
回复
这种效率太低了
一心念佛 2012-11-26
  • 打赏
  • 举报
回复
题说的不太清楚,不过可以用正则表达式试试!
Inhibitory 2012-11-26
  • 打赏
  • 举报
回复
String.contains方法

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧