您的位置:首页 > 其它

算法题之简单的字符串处理(一)

2012-06-24 23:25 288 查看
import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;

/**

* 题目: 给定一个字符串string str="中文字符**********************"

* 用程序求出现频率最高的字符,(要求写成函数,开发语言不限,不能直接调用系统方法。)

*

* @author david

*/

public class Problem_1 {

/**

* 不直接调用系统方法

*/

public void solve(String str) {

char[] cha=str.toCharArray(); //这个方法应该不算系统方法吧...难不成读数据的时候就要将字符一个个读到字符数组中?...

int[] num = new int[str.length()]; // 记录每个字符出现的次数,数组元素默认初值都为0,无需置零处理

boolean exist ; // 判断一个字符是否已经存在

int max = 1; // 记录最大次数的变量

int index = 0; // 记录出现频率最高的字符的下标

for (int i = 0; i < cha.length; i++) { // 对字符数组进行遍历

exist=false; //默认为不存在

// 判断该字符是否是已出现的字符

for (int j = 0; j < i; j++) { // 第一次不会进入循环

if (cha[i] == cha[j]) {

num[j]++; // 把出现次数累加到第一次出现该字符的位置

if (num[j] > max) { // 保存当前最大次数和字符下标

max = num[j];

index = j;

}

exist = true;

break;

}

}

// 第一次循环或该字符未在前面出现的情况

if (exist == false) {

num[i]++;

}

}

if (max == 1) { // 都是出现一次,无重复

System.out.println("该字符串无一字符重复,出现频率皆为1 !");

} else {

System.out.println("出现频率最高的字符为:\t" + cha[index]);

System.out.println("出现次数为:\t" + max);

}

}

/**

* 直接调用系统方法

*/

public void solve2(String str){

char[] cha =new char[str.length()];

Map<Character, Integer> map=new HashMap<Character,Integer>(); //使用哈希map

str.getChars(0, str.length(), cha, 0);

int max=1;

Character ch=null;

for (Character c : cha) {

if(map.containsKey(c)){ //这个方法应该算直接调用系统方法了

int num=map.get(c)+1;

map.put(c, num); //更新相应的值

if(num>max){ //记录最大值和该字符

max=num;

ch=c;

}

}else{

map.put(c, 1); //第一次加进map,把值置为1

}

}

if (max == 1) {

System.out.println("该字符串无一字符重复,出现频率皆为1 !");

} else {

System.out.println("出现频率最高的字符为:\t" + ch);

System.out.println("出现次数为:\t" + max);

}

}

/**

*可以测一下,如果存在有两个字符出现得一样多,那么出现次数先达到最大值的字符为频率最高的

*/

public static void main(String[] args) {

while (true) {

System.out.println("请输入目标字符串:");

Scanner input = new Scanner(System.in);

String str = input.next();

System.out.println("方案一:");

Problem_1 pro = new Problem_1();

pro.solve(str);

System.out.println("方案二:");

pro.solve2(str);

}

}

}

//以上全部内容皆可直接运行!欢迎大家找bug~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: