我一直在阅读时间复杂度方面的内容,并且已经涵盖了基础知识。为了强化这个概念,我看了一下我最近在 SO 上给出的答案。出于某种原因,这个问题现在已经结束,但这不是重点。我无法弄清楚我的答案的复杂性是什么,并且在我得到任何有用的反馈之前问题就被关闭了。
任务是找到字符串中的第一个唯一字符。我的回答很简单:
public String firstLonelyChar(String input)
{
while(input.length() > 0)
{
int curLength = input.length();
String first = String.valueOf(input.charAt(0));
input = input.replaceAll(first, "");
if(input.length() == curLength - 1)
return first;
}
return null;
}
我的第一个想法是,由于它查看每个字符,然后在 期间再次查看每个字符,replaceAll()
它将是 O(n^2)。
然而,它让我开始思考它的实际工作方式。对于检查的每个字符,它会删除字符串中该字符的所有实例。所以n
是不断缩小。这个因素是如何影响的?这是否使它成为 O(log n),或者有什么我没有看到的?
我在问什么:
所写算法的时间复杂度是多少,为什么?
我不是在问什么:
我不是在寻找改进它的建议。我知道可能有更好的方法来做到这一点。我试图更好地理解时间复杂度的概念,而不是找到最佳解决方案。