我需要编写某种循环来计算字符串中每个字母的频率.
例如:"aasjjikkk"将计为2'a',1'',2'j',1'i',3'k'.最终像这样的id最终会出现在一个地图中,其中字符为键,计数为值.有什么好主意怎么做?
所以我想知道在for循环中何时创建对象(或基元),这对空间复杂性有何影响?
例如,下面是一个代码示例:
public boolean checkUnique(String p){
int term = -1;
int len = p.length();
for (int i =0; i<len; i++) {
char c = p.charAt(i);
StringBuilder sb = new StringBuilder(p.substring(0, i));
sb.append(p.substring(i+1, len));
String str = sb.toString();
if (str.indexOf(c) != term) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
所以我试图分析这个算法的空间复杂性.它看起来像是O(n).这是我的推理:迭代次数等于输入大小,并且在每次迭代中我们创建一个StringBuilder对象,因此我们创建与输入大小成比例的StringBuilder对象.同样的推理可以应用于我们在每次迭代时创建String对象和char的事实.这个推理是否正确?
我问的原因是因为我遇到了一种算法,在每次迭代后进行以下赋值:
int val = str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
然而,该算法具有O(1)空间复杂度.所以我的理解一定不正确呢?在这种情况下,checkUnique算法的空间复杂度也为O(1).