java实现--字符串中第一个单独出现的字符

需求:

    给定一个由大写字母组成的字符串,返回第一个单独出现的字母

分析:

    1、思路一
    创建HashMap集合,遍历字符串,将各个字母及对应的角标存到集合中,再次遍历字符串,看当前字符对应的角标和HashMap集合中的角标是否相同,如果相同就直接返回,如果不同,将HashMap集合中的角标改成该字母在字符串中的当前角标,继续遍历,如果没有单独出行的字母,就返回特殊标记代表没有该字母,比如返回'#'。
    2、思路二
    创建HashMap集合,遍历字符串,将各个字母出现的次数记录下来,再次遍历字符串,看map集合中该字母的个数是否是1,如果是就返回该字母,否则继续遍历。
    3、思路三
    创建int[]数组,记录各个字母的出现个数,大写字母共26,所以数组大小是26,假设A对应角标0,那么Z对应角标25。遍历字符串,更新int[]数组中该字符的个数,再次遍历字符串,看字符对应的个数是否是1,如果是就直接返回,否则继续遍历。

代码:

import java.util.*;

class UniqueChar{
	//思路一
	public static char getFirstUnique1(String str){
		//创建HashMap集合,将字符串中各个字母和角标存到集合中
		HashMap<Character, Integer> hm = new HashMap<Character, Integer>();

		for(int i = 0; i < str.length(); i++){
			hm.put(str.charAt(i), i);
		}

		//再次遍历字符串,看map集合中的角标和当前字符在字符串中的角标是否相同,如果相同直接返回,否则修改map集合中的值,继续遍历
		for(int i = 0; i < str.length(); i++){
			if(i == hm.get(str.charAt(i))){
				return str.charAt(i);
			}
			else{
				hm.put(str.charAt(i), i);
			}
		}

		return '#';
	}

	//思路二
	public static char getFirstUnique2(String str){
		//创建HashMap集合,存储各个字母及出现的次数
		HashMap<Character, Integer> hm = new HashMap<Character, Integer>();

		//遍历字符串,将字母和出现的个数存到map集合中
		for(int i = 0; i < str.length(); i++){
			int count = 0;
			if(hm.containsKey(str.charAt(i))){
				count = hm.get(str.charAt(i));
			}

			hm.put(str.charAt(i), count+1);
		}

		//遍历字符串,返回出现个数是1的字母
		for(int i = 0; i < str.length(); i++){
			if(hm.get(str.charAt(i)) == 1){
				return str.charAt(i);
			}
		}

		return '#';
	}

	//思路三
	public static char getFirstUnique3(String str){
		//创建int[]数组,存储各个字母的个数
		int[] result = new int[26];

		//遍历字符串,更新int[]数组中的个数
		for(int i = 0; i < str.length(); i++){
			result[str.charAt(i)-'A'] += 1;
		}

		//遍历字符串,返回个数是1的字母
		for(int i = 0; i < str.length(); i++){
			if(result[str.charAt(i)-'A'] == 1){
				return str.charAt(i);
			}
		}
		
		return '#';
	}

	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		String str;

		while(scan.hasNext()){
			str = scan.nextLine();

			System.out.println(str+"字符串中第一个单独出现的字母是"+getFirstUnique1(str));
			System.out.println(str+"字符串中第一个单独出现的字母是"+getFirstUnique2(str));
			System.out.println(str+"字符串中第一个单独出现的字母是"+getFirstUnique3(str));
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值