基于java查找并打印输出字符串中字符出现次数
作者:cqy19951026 发布时间:2022-07-28 19:45:47
标签:java,查找,打印,字符串
今天在面试时遇到一道算法的题:
给定一个字符串,输出每次字符出现的次数;要求按照顺序输出;
自己的思路开始是:
1.把String转换char数组
2.直接去遍历数组,获取每个字符出现次数,遇到不同时候重新记录
3.把结果用StringBuffer拼接后输出
public class Record {
public static void main(String[] args) {
System.out.println("直接遍历数组的方法:"+compressStrArray("aaacccddeffgghhhhaa"));
}
//直接遍历数组拼接,获得对字符记录结果是有序的,但是会出现重复字符的情况,在去修改重复字符逻辑也比较麻烦
public static String compressStrArray(String srcStr) {
char[] chars = srcStr.toCharArray();
char c = chars[0];
int i = 0;
int a = 0;
StringBuffer buffer = new StringBuffer();
for (char aChar : chars) {
a++;
if (aChar != c) {
buffer.append(i).append(c+" ");
c = aChar;
i=1;
}else {
i++;
}
if (a >= chars.length) {
buffer.append(i).append(c+" ");
}
}
return buffer.toString();
}
}
得到的结果是:3a 3c 2d 1e 2f 2g 4h 2a
结果虽然是有序的,但会出现重复字符记录的情况,修改起来比较麻烦,于是暂时放下了,如果不考虑重复只考虑有序的话可以使用这种方法
后来在晚上跑步的时候想到了可以使用map容器,一开始使用了HashMap
public class Record {
public static void main(String[] args) {
System.out.println("使用Linkedhashmap容器的方法:"+compressStrArrayLinkedHashMap("cccddeffgghhhhaaa"));
}
//先吧字母存在hashmap容器中,在从hashmap中拿出来拼接,顺序是计算hashcode后的顺序,不是放入字符的顺序
public static String compressStrArrayHashMap(String srcStr) {
HashMap<Character, Integer> map = new HashMap<>();
char[] chars = srcStr.toCharArray();
for (char aChar : chars) {
if (map.get(aChar)!=null) {
map.put(aChar,map.get(aChar)+1 );
}else {
map.put(aChar,1 );
}
}
StringBuffer buffer = new StringBuffer();
for (Character character : map.keySet()) {
if (map.get(character)!=1) {
buffer.append(map.get(character)).append(character+" ");
}else {
buffer.append(character+" ");
}
}
return buffer.toString();
}
}
调整了一下字符,发现得到的结果是:3a 3c 2d e 2f 2g 4h
记录的顺序是计算hashcode后的顺序,不是放入字符的顺序,但是去掉了重复字符,如果单纯记录次数可以使用hashmap
最后在看api文档时候发现了还有一个LinkedHashMap可以保证放入对象的顺序,于是有将hashmap改为linkedhashmap
public class Record {
public static void main(String[] args) {
System.out.println("使用Linkedhashmap容器的方法:"+compressStrArrayLinkedHashMap("cccddeffgghhhhaaa"));
}
public static String compressStrArrayLinkedHashMap(String srcStr) {
LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
char[] chars = srcStr.toCharArray();
for (char aChar : chars) {
if (map.get(aChar)!=null) {
map.put(aChar,map.get(aChar)+1 );
}else {
map.put(aChar,1 );
}
}
StringBuffer buffer = new StringBuffer();
for (Character character : map.keySet()) {
if (map.get(character)!=1) {
buffer.append(map.get(character)).append(character+" ");
}else {
buffer.append(character+" ");
}
}
return buffer.toString();
}
}
最后得到结果是:3c 2d e 2f 2g 4h 3a
顺序是放入字符的顺序,也没有了重复,如果要保证有序不重复的记录应该使用LinkedHashMap来作为记录容器
来源:https://www.cnblogs.com/cqy1026/p/13899807.html


猜你喜欢
- 日常使用中spring的 @Cacheable 大家一定不陌生,基于aop机制的缓存实现,并且可以选择cacheManager具体提供缓存的
- WPF实现一个简单的多运算符表达式计算器,供大家参考,具体内容如下1.先看下效果图首先外围给了一个grid 把他分成了两行 第一行用来显示文
- 本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法。分享给大家供大家参考,具体如下:一、如图二、代码实现publ
- 先如今idea中的spring项目,springBoot的项目的开发一般都是基于maven创建的项目。这大大简化我我们对于各种依赖包的管理,
- MD5的全称是Message-Digest Algorithm 5,Message-Digest泛指字节串(Message)的Hash变换,
- 此组件解决的问题是:「谁」在「什么时间」对「什么」做了「什么事」本组件目前针对 Spring-boot 做了 Autoconfig,如果是
- Java的常量池通常分为两种:静态常量池和运行时常量池静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面
- 数据库里面表的字段中带有“”_“下划线,我们知道插件默认的是将这些带有下划线的字段默认的变成“优美的驼峰式”的。表是肯定不能动的,实体类的字
- 目录一、简述二、内容一、简述利用C# TcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名
- 本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能。分享给大家供大家参考之用。具体方法如下:本实例源自
- 1、简介对于数据访问层,无论是SQL(关系型数据库) 还是NOSQL(非关系型数据库),SpringBoot 底层都是采用 SpringDa
- 目录为什么选择MQTTMQTT, 启动!使用方式Client模式创建工厂类创建工具类Spring Integration总结为什么选择MQT
- 一、算术运算符运算符:常见的±*/等表达式:运算符连接起来符合java语法的式子,比如a+b算术运算符:+ - * / %注:要想得到小数,
- java调用Rsync并发迁移数据并执行校验java代码如下RsyncFile.javaimport lombok.NoArgsConstr
- EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来
- 人机猜拳小游戏,只要用到的java面向对象的思维模式。本游戏中有游戏玩家和计算机两个参与者。玩家和计算机都有的属性是姓名和得分。共分为4个类
- springboot jpa 延迟加载问题在springboot中,在application.properties的配置文件中新增sprin
- MyBatis中PageHelper不生效今天使用pageHelper,发现设置了PageHelper.startPage(page, pa
- 这篇文章主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- jar包就指第三方提供的开源的API,这些API不属于JDK的,需要通过导入才能使用。添加和导入的区别注意:本文里的 导入 和 添加 jar