主要掌握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. java_ant详解

    转自:http://hi.baidu.com/victorlin23/item/721b892c770be3d7a517b695 1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说 ...

  2. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  3. MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现

    一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...

  4. aaaaaaaaaaaaaa

    方法和事件的区别是? For(var 0 in file) Foreach(var i=0;i<length.i++) Git stash Git pull –rebase origin bra ...

  5. 模拟 2013年山东省赛 J Contest Print Server

    题目传送门 /* 题意:每支队伍需求打印机打印n张纸,当打印纸数累计到s时,打印机崩溃,打印出当前打印的纸数,s更新为(s*x+y)%mod 累计数清空为0,重新累计 模拟简单题:关键看懂题意 注意: ...

  6. BZOJ1109 : [POI2007]堆积木Klo

    f[i]表示第i个在自己位置上的最大值 则f[i]=max(f[j])+1 其中 j<i a[j]<a[i] a[i]-a[j]<=i-j -> j-a[j]<=i-a[ ...

  7. BZOJ3734 : [Ontak2013]Miny

    将所有炸弹按坐标排序 x<-y连边表示x爆炸了y也会爆炸 如果是DAG则直接拓扑排序+DP求出每个点出发能走到的最左端和最右端的点 有环则SCC缩点后再拓扑 用线段树优化建图的过程 边数$O(n ...

  8. 产品原型设计工具 Balsamiq Mockups(转)

    Balsamiq Mockups是产品设计师绘制线框图或产品原型界面的利器.在产品设计的需求阶段,低保真的线框图或者草图设计介于产品流程设计与高保真DEMO设计之间,在Balsamiq Mockups ...

  9. 运行时(iOS)

    运行时(iOS)   一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得 ...

  10. iOS移动开发周报-第24期

    iOS移动开发周报-第24期 [摘要]:本期iOS移动开发周报带来如下内容:苹果更新了iTunes Connect的设计.UIKit Dynamics 教程:抛掷 Views.iOS APP 架构漫谈 ...