为IDE设计自动完成功能。给定下面的String [],输入中包含一些大写字母和小写字母。我们要求实施自动完成功能,并且所有大写字母必须匹配。 例如:
String[] className {
"GraphView",
"DataGraphView",
"DataController",
"GraphViewController",
"DataScienceView"
}
autocomplete(String[] className, "Data"); --> {"DataGraphView", "DataController", "DataScienceView"};
autocomplete(String[] className, "GVi"); --> {"GraphView", "GraphViewController"};
autocomplete(String[] className, "GraphController"); --> {""};
我想也许我可以使用trie,但是我不知道如何处理case2,即“ GVi”。有谁可以帮助我吗?任何想法或代码表示赞赏!非常感谢!
答案 0 :(得分:0)
实际上并不难,我希望这可以帮助您思考。不要在家庭作业中使用过多的StackOverflow,否则在以后的生活中进行技术面试时会遇到麻烦;)
public static String[] autocomplete(String[] classNames, String input) {
String inputAsRegexp = input.replaceAll("([A-Z][a-z]*)", "$1[a-z]*") + ".*";
return Arrays.stream(classNames).filter(className -> className.matches(inputAsRegexp)).toArray(String[]::new);
}
第一行从输入中准备一个正则表达式。它检测到一个大写字母,然后是所有小写字母,然后添加无限数量的小写字母以到达名称段的末尾。然后添加。*以匹配其余的。
示例:GVi -> G[a-z]*Vi[a-z]*.*
一旦完成此正则表达式,我便会基于它过滤类名。