一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
主要掌握String中的方法
char[] toCharArray()
将此字符串转换为一个新的字符数组。
int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引
集合List和set的区别
List中可以出现重复的元素,Set中不能出现重复的元素
集合遍历:
List遍历
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
sb.append(iterator.next());
}
set遍历
for(Iterator<String> it = set.iterator();it.hasNext();){
String s = (String) it.next();
}
代码实现:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/*
一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",
求出现次数最多的那个字母及次数,如有多个重复的则都求出。网上的解答有些是错的,少了47行那句话。
*/
public class Demo3 {
public static void main(String[] args) {
String data="aavzcadfdsfsdhshgWasdfasdf";
getMax(data);
}
private static void getMax(String data) {
//将字符串使用toCharArray()方法变为字符数组,再遍历数组分别存入ArrayList和TreeSet
List<String> list = new ArrayList<String>();
Set<String> set = new TreeSet<String>();
char[] array = data.toCharArray();
for (int i = 0; i < array.length; i++) {
list.add(String.valueOf(array[i]));
set.add(String.valueOf(array[i]));
}
//利用集合工具类Collections的sort()方法对ArrayList排序
Collections.sort(list);
//使用StringBuffer存放list,并用toString()方法转换为字符串。
StringBuffer sb = new StringBuffer();
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
sb.append(iterator.next());
}
String string = sb.toString();
//至此将字符串变为了有序不允许重复的set和有序且字母有重复的String
//迭代set,使用indexOf和lastIndexOf方法操作String得到重复字母次数
//max记录最大重复次数,maxString记录当前最大字符串,maxList存储所有最大字符,maxList.size()即为重复字符个数
int max=0;
String maxString="";
ArrayList<String> maxList = new ArrayList<String>();
for(Iterator<String> it = set.iterator();it.hasNext();){
String s = (String) it.next();
int begin = string.indexOf(s);
int end = string.lastIndexOf(s);
int value = end-begin+1;
if(value>max&&value>1){
maxList.clear();//产生新的最大字符要清空之前的最大字符,否则输出最大字符不正确。
max = value;
maxString = s;
maxList.add(s);
}else if(value==max){
maxList.add(s);
}
}
System.out.println(list);
System.out.println(set);
for (int i = 0; i < maxList.size(); i++) {
System.out.println("最大字符"+maxList.get(i));
}
System.out.println("最多次数:"+max);
}
}
第二种方法
package me.gary.test; import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class StringTest { public static void main(String[] args) {
String str = "aaadddcceefgfaratahfarfhg";
System.out.println(getDuo(str));
} public static String getMax(String str){ char[] charArray = str.toCharArray();
Map<Integer, String> m = new HashMap<Integer, String>();
int num=0;
String c = "";
for(int i=0;i<charArray.length;i++){
c = String.valueOf(charArray[i]);
for(int j = 0;j<charArray.length;j++){
if(c.equals(String.valueOf(charArray[j]))){
num++;
}
}
m.put(num, c);
num=0;
} Set<Integer> keySet = m.keySet();
Integer max = Collections.max(keySet);
String s = m.get(max); return s+"="+max;
} }
结果:a=7
一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。的更多相关文章
- java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...
- 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...
- 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如str为abca时,输出则为abcabca
今天碰到一个算法题觉得比较有意思,研究后自己实现了出来,代码比较简单,如发现什么问题请指正.思路和代码如下: 基本思路:从左开始取str的最大子字符串,判断子字符串是否为str的后缀,如果是则返回st ...
- javascript获取一个字符串的长度(包含中文)
/* getStrLen(str):获取一个字符串的长度(包含中文) */ function getStrLen(str){ let len = 0, i, c; for (i = 0; i < ...
- 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
这个是LeetCode上的一道题目.本机上运行时正确的,但是LeetCode上显示是错误的,所以没有办法了只能记录在博客上了. 我的想法是先把pattern和str都转化成数组.例如"abb ...
- sed打印包含一个字符串的行到包含另一个字符串的行解答
sed -n '/字符串1/,/字符串2/p' filename 这个命令为什么有时候打印不出来想要的东西,例如:sed -n '/root/,/adm/p' /etc/passwd 我 ...
- 我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数
金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数 ...
- Java面试基础--(出现次数最多的字符串)
题目:给定字符串,求出现次数最多的那个字母及次数,如有多个 重复则都输出. eg,String data ="aaavzadfsdfsdhshdWashfasdf": 思路: 1. ...
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)
php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...
随机推荐
- TypeScript的崛起
今天要讨论的话题是TypeScript.之前在微博上转载过一篇<The Rise of TypeScript?>的文章,今天来谈一下我的感想. 很多朋友应该都了解,TypeScript是微 ...
- H264码流打包分析
转自:http://www.360doc.com/content/13/0124/08/9008018_262076786.shtml SODB 数据比特串-->最原始的编码数据 RBSP ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) A. Bear and Elections 优先队列
A. Bear and Elections ...
- loj 1009(dfs)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25835 思路:对每一个连通块将其染色,然后取颜色相同的最多的点,最 ...
- loadrunner关联数组后拼凑字符串
loadrunner拼接关联数组的元素 int arrSize=0; int index=1; int len=0; char arryStartString[1024]=""; ...
- html整理(2)
使用mailto在网页中链接Email地址 <a>标签还有一个作用是可以链接Email地址,使用mailto能让访问者便捷向网站管理者发送电子邮件.我们还可以利用mailto做许多其它事情 ...
- WPF之DataContext
1. 继承属性: DataContext is a property on FrameworkElement (base class for all WPF Controls) and is impl ...
- Catching Fish[HDU1077]
Catching Fish Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- SVN标准命令
SVN标准命令 范例 checkout 检出 svn co URL 检出app/search/news/apache/主干上最新版本到本地工作副本,可执行命令: svn co https://s ...
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...