找出一个字符串中第一个无重复字符

本文介绍了一种高效算法,用于从字符串中找到第一个不重复的字符,并提供了两种实现方法。第一种方法通过使用HashMap记录字符出现次数,复杂度为O(n);第二种方法采用双重循环检查,效率较低。文章通过具体示例展示了如何实现这两种算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 编写一个高效率函数来找出一个字符串中第一个无重复字符.
 * 例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).函数调用模型如下:
 * Public static Character FirstNoRepeated(String str);
 */
public class FirstNoRepeated {
	public static void main(String[] args) {
		
		System.out.println(FirstNoRepeated("total"));
		
		System.out.println(FirstNoRepeated1("teeter"));
		
	}
	/**
	 * 利用map记录字符串中每个字符的个数
	 * @param str
	 * @return
	 */
	public static Character FirstNoRepeated(String str){
		Map<Character,Integer> map = new HashMap<Character,Integer>();
		for(int i=0; i<str.length();i++){
			if(!map.containsKey(str.charAt(i))){
				map.put(str.charAt(i), 1);
			}else{
				Integer k = map.get(str.charAt(i));
				map.put(str.charAt(i), ++k);
			}
		}
		//按字符串的顺序返回首次出现的字符
		for(int i = 0 ; i < str.length(); i++){
			if(map.get(str.charAt(i)) == 1){
				return str.charAt(i);
			}
		}
		return null;
	}
	/**
	 * 方式一:双重循环
	 * @param str
	 * @return
	 */
	public static Character FirstNoRepeated1(String str){
		int count = 0;
		char c;
		//拿出每位中的每个字符与原字符串中的每个字符进行比较并记录出现的次数
		for(int i=0;i<str.length();i++){
			c = str.charAt(i);
			for(int j=0;j<str.length();j++){
				char cc = str.charAt(j);
				if(c == cc){
					count ++;
				}
			}
			//返回首次出现的第一个字符
			if(count == 1){
				return c;
			}
			count = 0;
		}
		return null;
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值