求包含a~z中多个字符的字符串中重复出现最多的字母及次数问题
2017-08-31 21:22
459 查看
问题: 一个字符串中可能包含a~z中的多个字符(有重复),如String data = "dkiekdadlidaakakkdkdkd",
求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。
思路:
1、将字符串变为字符数组;
2、将字符数组中字符放入set集合中去重,剩下的就是在字符串中出现的字母;
3、将字符放入list集合中,排序,然后在转为字符串;
4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,
得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数,
a)记录最大的出现次数,
b)将所有字母和对应的出现次数放入map集合中;
5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;
6、遍历maxlist集合,得到最大出现次数的所有字母。
下面直接贴上代码:
public static void main(String[] args) {
String str = "aakaakddccadldaklaaidkkeikdkdkds";
getRepeatCharAndNum(str);
}
/**
* 一个字符串中可能包含a~z中的多个字符(有重复),如String data = "dkiekdadlidaakakkdkdkd",
* 求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。
*/
public static void getRepeatCharAndNum(String str) {
/**
* 思路: 1、将字符串变为字符数组; 2、将字母放入set集合中去重,剩下的就是在字符串中出现的字母;
* 3、将字母放入list集合中,排序,然后在转为字符串;
* 4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,
* 得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数, a)记录最大的出现次数,
* b)将所有字母和对应的出现次数放入map集合中;
* 5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;
* 6、遍历maxlist集合,得到最大出现次数的所有字母
*/
// 将字符串转换为char数组
char[] chars = str.toCharArray();
// 得到去除重复字母的set集合
TreeSet<String> set = getTreeSetByChars(chars);
// 获得排序后的集合
List<String> sortList = getSortList(chars);
// 将排序后的集合转为字符串
str = getSortString(sortList);
int max = 0;// 出现最多的字母的次数
Map<String, Integer> map = new HashMap<String, Integer>();
// 遍历set集合,查看各个字母分别出现的次数,将数据存入map集合中,key为字母,value为次数
Iterator<String> its = set.iterator();
while (its.hasNext()) {
String os = (String) its.next();
int begin = str.indexOf(os);// 获得重复字母中第一个的位置
int end = str.lastIndexOf(os);// 获得重复字母中最后一个的位置
int value = end - begin + 1;// 差值就是重复字母的个数
map.put(os, value);// 将重复字母和出现次数,放入map中
if (value > max) {
max = value;// 将目前出现的最大次数赋值给max变量
}
}
//存放出现最多次的字母的集合
ArrayList<String> maxList = getMaxAppearChar(map, max);
//打印出现次数最多的字母及个数
printMaxAppearChar(max ,maxList) ;
}
/**
* 遍历将重复出现次数最多的字母遍历出来
*/
private static void printMaxAppearChar(int max, ArrayList<String> maxList) {
System.out.println("最大的数据重复是 :" + max);
System.out.println(" 最大的数据是:");
for (int i = 0; i < maxList.size(); i++) {
System.out.print(maxList.get(i) + " ");
}
}
/**
* 存放出现最多次的字母的集合
*/
private static ArrayList<String> getMaxAppearChar(Map<String, Integer> map,
int max) {
ArrayList<String> maxList = new ArrayList<String>();
for (String key : map.keySet()) {
System.out.println("key = " + key + " value = " + map.get(key));
if (max == map.get(key)) {
maxList.add(key);// 最大出现次数的字母
}
}
return maxList;
}
/**
* 将排序后的list集合数据放入字符串中
**/
private static String getSortString(List<String> sortList) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < sortList.size(); i++) {
buffer.append(sortList.get(i));
}
String str = buffer.toString();
System.out.println(str);
return str;
}
/**
* 获得排序后的集合
*
* @param chars
* @return
*/
private static List<String> getSortList(char[] chars) {
// list集合
ArrayList<String> lists = new ArrayList<String>();
for (int i = 0; i < chars.length; i++) {
lists.add(String.valueOf(chars[i]));
}
// 将lists集合排序
Collections.sort(lists);
System.out.println(lists);
return lists;
}
/**
* 根据chars字符数组获得TreeSet集合,将重复字母去重
*/
private static TreeSet<String> getTreeSetByChars(char[] chars) {
TreeSet<String> set = new TreeSet<String>();// set集合,去重
for (int i = 0; i < chars.length; i++) {
set.add(String.valueOf(chars[i]));
}
System.out.println(set);// 去重后的set集合中是重复出现的字符
return set;
}
求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。
思路:
1、将字符串变为字符数组;
2、将字符数组中字符放入set集合中去重,剩下的就是在字符串中出现的字母;
3、将字符放入list集合中,排序,然后在转为字符串;
4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,
得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数,
a)记录最大的出现次数,
b)将所有字母和对应的出现次数放入map集合中;
5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;
6、遍历maxlist集合,得到最大出现次数的所有字母。
下面直接贴上代码:
public static void main(String[] args) {
String str = "aakaakddccadldaklaaidkkeikdkdkds";
getRepeatCharAndNum(str);
}
/**
* 一个字符串中可能包含a~z中的多个字符(有重复),如String data = "dkiekdadlidaakakkdkdkd",
* 求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。
*/
public static void getRepeatCharAndNum(String str) {
/**
* 思路: 1、将字符串变为字符数组; 2、将字母放入set集合中去重,剩下的就是在字符串中出现的字母;
* 3、将字母放入list集合中,排序,然后在转为字符串;
* 4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,
* 得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数, a)记录最大的出现次数,
* b)将所有字母和对应的出现次数放入map集合中;
* 5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;
* 6、遍历maxlist集合,得到最大出现次数的所有字母
*/
// 将字符串转换为char数组
char[] chars = str.toCharArray();
// 得到去除重复字母的set集合
TreeSet<String> set = getTreeSetByChars(chars);
// 获得排序后的集合
List<String> sortList = getSortList(chars);
// 将排序后的集合转为字符串
str = getSortString(sortList);
int max = 0;// 出现最多的字母的次数
Map<String, Integer> map = new HashMap<String, Integer>();
// 遍历set集合,查看各个字母分别出现的次数,将数据存入map集合中,key为字母,value为次数
Iterator<String> its = set.iterator();
while (its.hasNext()) {
String os = (String) its.next();
int begin = str.indexOf(os);// 获得重复字母中第一个的位置
int end = str.lastIndexOf(os);// 获得重复字母中最后一个的位置
int value = end - begin + 1;// 差值就是重复字母的个数
map.put(os, value);// 将重复字母和出现次数,放入map中
if (value > max) {
max = value;// 将目前出现的最大次数赋值给max变量
}
}
//存放出现最多次的字母的集合
ArrayList<String> maxList = getMaxAppearChar(map, max);
//打印出现次数最多的字母及个数
printMaxAppearChar(max ,maxList) ;
}
/**
* 遍历将重复出现次数最多的字母遍历出来
*/
private static void printMaxAppearChar(int max, ArrayList<String> maxList) {
System.out.println("最大的数据重复是 :" + max);
System.out.println(" 最大的数据是:");
for (int i = 0; i < maxList.size(); i++) {
System.out.print(maxList.get(i) + " ");
}
}
/**
* 存放出现最多次的字母的集合
*/
private static ArrayList<String> getMaxAppearChar(Map<String, Integer> map,
int max) {
ArrayList<String> maxList = new ArrayList<String>();
for (String key : map.keySet()) {
System.out.println("key = " + key + " value = " + map.get(key));
if (max == map.get(key)) {
maxList.add(key);// 最大出现次数的字母
}
}
return maxList;
}
/**
* 将排序后的list集合数据放入字符串中
**/
private static String getSortString(List<String> sortList) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < sortList.size(); i++) {
buffer.append(sortList.get(i));
}
String str = buffer.toString();
System.out.println(str);
return str;
}
/**
* 获得排序后的集合
*
* @param chars
* @return
*/
private static List<String> getSortList(char[] chars) {
// list集合
ArrayList<String> lists = new ArrayList<String>();
for (int i = 0; i < chars.length; i++) {
lists.add(String.valueOf(chars[i]));
}
// 将lists集合排序
Collections.sort(lists);
System.out.println(lists);
return lists;
}
/**
* 根据chars字符数组获得TreeSet集合,将重复字母去重
*/
private static TreeSet<String> getTreeSetByChars(char[] chars) {
TreeSet<String> set = new TreeSet<String>();// set集合,去重
for (int i = 0; i < chars.length; i++) {
set.add(String.valueOf(chars[i]));
}
System.out.println(set);// 去重后的set集合中是重复出现的字符
return set;
}
相关文章推荐
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复最多的则都输出。
- 找出一个字符串中重复最多的字符以及出现的次数
- 字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
- 统计字符串中出现次数最多的字母的次数,如果有多个重复的,都求出
- 计算一个字符串最多重复的字符及出现次数
- 给一个字符串,包含了空格等标点符号,计算出出现次数最多的字母和该字母出现的次数
- JS 字符串中字符出现次数最多的字母 ,并返回次数
- 重复子串问题(二):求一个字符串中连续出现次数最多的子字符串
- JS编程-寻找字符串中出现最多的字符以及重复次数
- JavaScript计算一个字符串最多重复的字符及出现次数
- 问题6: 找出字符串中出现次数最多的字母及其出现的次数
- 给定字符串,求出现次数最多的那个字母及次数,如有多个重复则都输出
- 一个笔试面试经常问的问题——统计字符串中出现最多的字符及次数
- php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。
- 字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
- JavaScript计算一个字符串最多重复的字符及出现次数
- 从文件读取包含数字和字母字符串,统计每个字符出现的次数,将次数输出到另外一个文件