题目:
思路:这道题如果用常规的双重循环查找子串会超出时间限制,所以考虑一次遍历解决问题。
解法一(HashSet):
代码:
class
总结:利用hashSet不会添加重复元素的特性,来完成去重。
这里记录一下List、Set、Array相互转化的方法:
Array转List:
String[] arr = new String[n];
List<String> list = Arrays.asList(arr);(注意,若后续修改arr中的元素,list中相对应的值也会随之改变)
List转Array:
List<String> list = new ArrayList();
String[] arr = list.toArray(newString[list.size()]);(使用toArray方法,若后续修改list中的元素,arr中相对应的值不会随之改变)
List转Set:
List<String> list = new ArrayList();
Set<String> set = new HashSet<>(list);
Set转List:
Set<String> set = new HashSet<>();
List<String> list = new ArrayList<>(set);
这两种转化和toArray一样,若后续修改list(set)的值,set(list)中相当于的值不会改变。
Set和Array的相互转化,可综合上面的几种方法进行处理。
解法二(HashMap):
class
总结:
这两种解法的思想是一样的,只是在去重的处理细节上不一样。
只是使用HashMap的执行起来会比HashSet快,查了下资料,是因为HashMap使用唯一的键来获取对象,所以查询速度比HashMap要快一些。