主要掌握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",求出现次数最多的那个字母及次数,如有多个重复的则都求出。的更多相关文章

  1. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...

  2. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  3. 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如str为abca时,输出则为abcabca

    今天碰到一个算法题觉得比较有意思,研究后自己实现了出来,代码比较简单,如发现什么问题请指正.思路和代码如下: 基本思路:从左开始取str的最大子字符串,判断子字符串是否为str的后缀,如果是则返回st ...

  4. javascript获取一个字符串的长度(包含中文)

    /* getStrLen(str):获取一个字符串的长度(包含中文) */ function getStrLen(str){ let len = 0, i, c; for (i = 0; i < ...

  5. 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

    这个是LeetCode上的一道题目.本机上运行时正确的,但是LeetCode上显示是错误的,所以没有办法了只能记录在博客上了. 我的想法是先把pattern和str都转化成数组.例如"abb ...

  6. sed打印包含一个字符串的行到包含另一个字符串的行解答

    sed -n '/字符串1/,/字符串2/p' filename  这个命令为什么有时候打印不出来想要的东西,例如:sed -n '/root/,/adm/p'  /etc/passwd      我 ...

  7. 我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数

    金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数 ...

  8. Java面试基础--(出现次数最多的字符串)

    题目:给定字符串,求出现次数最多的那个字母及次数,如有多个 重复则都输出. eg,String data ="aaavzadfsdfsdhshdWashfasdf": 思路: 1. ...

  9. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

随机推荐

  1. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

    加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...

  2. JVM的数据类型

    Java虚拟机是通过某些数据类型来执行计算的,数据类型可以分为两种:基本类型和引用类型,基本类型的变量持有原始值,而引用类型的变量持有引用值. Java语言中的所有基本类型同样也都是Java虚拟机中的 ...

  3. Xamarin Anroid开发教程之Anroid开发工具及应用介绍

    Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Andro ...

  4. maven 编译报错 “找不到符号”

    报错如下: E:\workspace\iccardcore\mis\src\main\java\com\hxsmart\sicard\core\webapp\action\process\DayEnd ...

  5. 基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用

    基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extj ...

  6. quick 截屏

    MainScene local MainScene = class("MainScene", function() return display.newScene("Ma ...

  7. BZOJ3165 : [Heoi2013]Segment

    建立线段树,每个节点维护该区间内的最优线段. 插入线段时,在线段树上分裂成$O(\log n)$棵子树,若与当前点的最优线段不相交,那么取较优的,否则暴力递归子树. 查询时在叶子到根路径上所有点的最优 ...

  8. 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...

  9. NOIP200002税收与补贴

    试题描述 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...

  10. Spring_讲解

    http://s,i,s,h,u,o,k.com/forum/blogPost/list/6174.html