【发布时间】:2017-06-12 18:18:50
【问题描述】:
问题:给定一个字符串,我想使用Hash Map获取length = k的所有子字符串。
所以我声明了一个public static function getHistogram,它返回Map<String,Integer>,我正在尝试使用一个HashMap来获取该给定字符串的所有子字符串(作为键),以及已经出现在字符串,我想增加其键中的值(将是计数器)。
这是我目前得到的结果:当前输出: 输出不符合预期。
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Iterator;
import java.util.Set;
public class Main2{
public static void main(String[] args) throws InvalidValueException{
// Get a set of the entries
Set set = Main2.getHistogram("ababaca", 5).entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
System.out.println();
}
public static Map<String,Integer> getHistogram(String str, int k)
throws InvalidValueException
{
int i,j;
String tempStr;
Map<String, Integer> hmap = new HashMap<String, Integer>();
for(i = 0; i < str.length(); i++)
{
for(j=i; j < str.length(); j++){
tempStr = str.substring(i, j);
int count = hmap.containsKey(tempStr) ? hmap.get(tempStr) : 0;
hmap.put(tempStr, count + 1);
}
}
return hmap;
}
}
编辑:必须使用 count + 1 而不是 count++,但仍未完全修复。
输出:
: 7
a: 3
ab: 2
aba: 2
b: 2
bab: 1
ac: 1
c: 1
bac: 1
abac: 1
abab: 1
baba: 1
babac: 1
ababa: 1
ababac: 1
ba: 2
【问题讨论】:
-
“长度为 k”,但我没看到,k 在哪里使用
-
@matoni 我知道,它没有被使用,因为我想先得到所有的长度,当我成功时,我会相应地编辑它。
-
那么在从地图中过滤掉所有长度为 k 的子字符串之前,预期的行为是什么?
-
@matoni 正如我在上一条评论中提到的,我想输出给定字符串中的所有子字符串及其出现次数。