记录一个查询字符串相关的算法题目:
给定一个字符串"ababcda",输出每次字符出现的次数;要求按照顺序输出;
结果应该是:3a2b1c1d
思路:
1.将字符串转换为字符串数组;
2.遍历数组放置linkedhashmap,利用map的key唯一性
3.遍历map,利用stringBuilde拼接字符串输出;
public static void main(String[] args) {
String str = "ababcda";
String [] strArray= str.split("");
//为了保证顺序,使用LinkedHashMap,不能使用HashMap
Map<String,Integer> map= new LinkedHashMap<>(strArray.length);
for (String s : strArray) {
Integer value=map.get(s);
if(value==null){
map.put(s,1);
}else{
map.put(s,value+1);
}
//上述for循环内部代码可替换为如下一行
//map.merge(s, 1, Integer::sum);
}
Set<Map.Entry<String, Integer>> set=map.entrySet();
//StringBuilder提升拼接性能
StringBuilder stringBuilder=new StringBuilder();
set.forEach(item->{
stringBuilder.append(item.getValue()).append(item.getKey());
});
System.out.println(stringBuilder.toString());
}