public class Minganci {
static Map mgcMap = new HashMap<>();
public static void add(String mgcs) {
String[] split = mgcs.split(",");
for (int i = 0; i < split.length; i++) {
String mgc = split[i];
Map currentMap = mgcMap;
Map wordMap = null;
for (int j = 0; j < mgc.length(); j++) {
wordMap = (Map)currentMap.get(mgc.charAt(j));
if (wordMap == null) {
wordMap = new HashMap<>();
Map<String,String> isEnd = new HashMap<>();
if (j < mgc.length() - 1) {
isEnd.put("isEnd","0");
}else {
isEnd.put("isEnd","1");
}
wordMap.put(mgc.charAt(j),isEnd);
currentMap.putAll(wordMap);
currentMap = isEnd;
}else {
currentMap = wordMap;
}
}
}
}
public static boolean checkMgc(String string,String type) {
for (int i = 0; i < string.length(); i++) {
Map currentMap = (Map)mgcMap.get(string.charAt(i));
if (currentMap != null) {
int num = 1;
for (int j = i+1; j < string.length()-1; j++) {
currentMap = (Map)currentMap.get(string.charAt(j));
if (currentMap != null) {
num++;
String isEnd = (String)currentMap.get("isEnd");
if (isEnd.equals("1") && type.equals("0")) {
return true;
}
}else {
break;
}
}
if (num > 1) {
return true;
}
}
}
return false;
}
public static Set<String> findMgc(String string,String type) {
Set<String> set = new HashSet<>();
for (int i = 0; i < string.length(); i++) {
Map currentMap = (Map)mgcMap.get(string.charAt(i));
if (currentMap != null) {
StringBuffer buffer = new StringBuffer();
buffer.append(string.charAt(i));
int num = 1;
for (int j = i+1; j < string.length(); j++) {
currentMap = (Map)currentMap.get(string.charAt(j));
if (currentMap == null) {
break;
}
buffer.append(string.charAt(j));
num++;
String isEnd = (String)currentMap.get("isEnd");
if (isEnd.equals("1") && type.equals("0")) {
break;
}
}
if (num > 1) {
set.add(buffer.toString());
}
}
}
return set;
}
public static void main(String[] args) {
Minganci.add("广告,广告词,告诉,哈哈");
System.out.println(JSON.toJSONString(mgcMap));
boolean mgc = Minganci.checkMgc("这个广告的广告词写的真好", "1");
Set<String> set = Minganci.findMgc("他告诉我说这个广告的广告词写的真好哈哈", "0");
Set<String> set1 = Minganci.findMgc("他告诉我说这个广告的广告词写的真好哈哈", "1");
System.out.println(mgc);
System.out.println(set);
System.out.println(set1);
}
}