主要掌握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. zookeeper中client命令实践

    Welcome to ZooKeeper! 2016-09-14 16:06:04,528 [myid:] - INFO [main-SendThread(master:2181):ClientCnx ...

  2. intersection

    用来找到两个rdd的交集,注意,最终的new rdd的分区数量取决于两个rdd中的最大分区数量. 测试一下: val data1 = sc.parallelize(1 to 20,1) val dat ...

  3. Hark的数据结构与算法练习之多路归并排序

    算法说明 多路归并排序也叫k路归并排序,实际上是归并排序的扩展版,同样也是归并排序的一种,通常的应用场景的针对大数据量的排序. 实现过程: 1.从字面可以看出,多路归并就是将待排的大数据量分成K路,然 ...

  4. D. Array GCD

    You are given array ai of length n. You may consecutively apply two operations to this array: remove ...

  5. C++ windows遍历目录

    bool Search(TCHAR *Path,TCHAR *File) { HANDLE hFind; WIN32_FIND_DATA wfd; ZeroMemory(&wfd,sizeof ...

  6. 最短路(Bellman_Ford) POJ 3259 Wormholes

    题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...

  7. Redis 连接池的问题

      目录 Redis 连接池的问题    1 1.    前言    1 2.解决方法    1     前言 问题描述:Redis跑了一段时间之后,出现了以下异常. Redis Timeout ex ...

  8. VS 2010 WebSite网站 使用CodeBehide 方式开发[Web应用程序项目转Web网站]

    由于生成Web应用程序的文件非常大,100M左右,上传到香港太慢,对于运维工作很不现实, 所以只能改用单个源代码文件上传方式,也就是Web网站方式,但VS2010中只提供Web网站转Web应用程序功能 ...

  9. ios 开发中出现的 pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug

    主要原因是某部分内存释放的太频繁,解决方法是检查函数的中[xxx release]; 将其注释掉 就行了

  10. 【wikioi】1116 四色问题

    题目链接 算法:DFS 刚开始卡了一下,但后面想了想,于是 放上代码: #include <iostream> using namespace std; bool map[9][9]; i ...