概述
题目
//给定一个字符串,将字符串里面的字符按照出现的频率降序排列。
//例1:输入:“cbbaaa”,输出:“aaabbc”
//例2:输入:“cccaa”,输出:“cccaa”
//例3:输入:“aaAAA”,输出:“AAAaa”
思路
- 首先需要将字符串中的的字符出现的频率进行分类记录,
- 然后将字符串中字符按照出现的频率进行重组,保证同一个字符连续出现,题中没有不连续的字符(如:sdfdsada)
- 重组之后,按照相同字符组成的字符串的长度进行排序
- 将排序之后的字符串最为结果返回
实现代码
import java.util.HashMap;
import java.util.Map.Entry;
/**
* 描述:
* 作者: 郎国峰
* 时间: 2019年9月27日 下午8:10:44
*/
public class SecondQuestions {
public static void main(String[] args) {
System.out.println(sort("aaAAA"));
}
/**
*
* @Title: sort
* @Description: 给定一个字符串,将字符串里面的字符按照出现的频率降序排列
* @date 2019年9月27日 下午8:13:27
* @param @param str
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String sort(String str) {
//将字符串转换成char数组
char[] chars = str.toCharArray();
//声明一个HashMap用来保存每个字符出现的次数
HashMap<Character, Integer> map = new HashMap<Character,Integer>();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if( map.get(c) == null) {
map.put(c, 1);
}else {
int j = map.get(c);
map.put(c, ++j);
}
}
//将不同字符按照出现的次数进行重组字符串,并放到数组中
String[] strs = new String[map.size()];
int i = 0;
for ( Entry<Character, Integer> entrty : map.entrySet()) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < entrty.getValue(); j++) {
sb.append(entrty.getKey());
}
strs[i] = sb.toString();
i++;
}
//遍历数组中的字符串,按照字符串的长度进行排序,也就是按出现频率进行排序
for (int j = 0; j < strs.length-1; j++) {
for (int k = j+1; k < strs.length; k++) {
if(strs[j].length() < strs[k].length()) {
String s = strs[j];
strs[j] = strs[k];
strs[k] = s;
}
}
}
//将排序之后的字符串数组中的字符重新组装成字符串返回
StringBuilder rs = new StringBuilder();
for (int j = 0; j < strs.length; j++) {
rs.append(strs[j]);
}
return rs.toString();
}
}
总结
最后是实现了功能,但是感觉实现的思路和方法不是很好,如果您有更好的思路和方法,希望能不吝赐教,谢谢!
最后
以上就是安详钥匙为你收集整理的java 将字符串里面的字符按照出现的频率降序排列的全部内容,希望文章能够帮你解决java 将字符串里面的字符按照出现的频率降序排列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复