【发布时间】:2020-12-10 13:56:19
【问题描述】:
我有一个要求,我必须遍历一个包含字符串列表的数组:
String[] arr = {"abc","cda","cka","snd"}
并匹配字符串"bca",忽略字符的顺序,这将返回true,因为它存在于数组中("abc")。
为了解决这个问题,我有两种方法:
- 使用
Arrays.sort()对两个字符串进行排序,然后使用 Arrays.equals 进行比较。 - 创建2个hashmaps并添加字符串中每个字母的频率,然后最后使用equals方法比较两个char映射。
我读到使用Arrays.sort() 方法的复杂性更高。因此,考虑使用第二种方法,但是当我同时运行两种代码时,第一种方法执行程序所需的时间非常少。
有什么建议为什么会发生这种情况?
【问题讨论】:
-
“非常少的时间”多少(绝对值)以及数组有多大?
-
如果您使用您在此处发布的示例(4 个长度为 3 的字符串),时间复杂度是无关紧要的。当输入更大时,时间复杂度实际上开始成为一个因素。
-
抱歉 - 为什么不直接在数组中搜索目标字符串?我错过了什么吗?
-
我不能在这里使用 equals 因为字符串的顺序不一样。数组中的 fox 示例是“cab”,我正在搜索“abc”。然后我将不得不运行两个嵌套循环 1 是遍历字符串数组,其他是遍历该字符串中的字符
-
时间复杂度只告诉您,该方法将如何随着(显着)更大的输入进行扩展。它不会告诉你哪种方法更快。对于您的小字符串和数组,散列方法较慢也就不足为奇了。您需要非常大的输入才能看到不同时间复杂度的影响。
标签: java arrays algorithm sorting java-8