论坛首页 Java企业应用论坛

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

浏览 10616 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-15  

寻求最佳的算法

1.       编写一个高效率函数来找出一个字符串中第一个无重复字符.例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).函数调用模型如下:

Public static Character FirestNoRepeated(String str);

public class firstNoRepit {
	
	public static void main(String[] args) {
		
		String str="dsfdghgshgfjej";
		
		System.out.println(firstNo( str));
    }
	
	public static Character firstNo(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), 2);  
				
			}else{
				
				 map.put(str.charAt(i), 1);
			}
			
			
		}
		for(int i=0; i<str.length();i++){
			
			if(map.get(str.charAt(i))==1 ){
				
				return str.charAt(i);
			}
		}
		
		return null;
	}

}

 

 

   发表时间:2010-04-15  
你这是问题还是结论:关是这个MAP就够了,还谈什么别的.
0 请登录后投票
   发表时间:2010-04-15   最后修改:2010-04-15
楼主,方法名是FirstNoRepeated吧!

写了个看看行不行:

public static Character FirstNoRepeated(String str){
		for(int i=0;i<str.length();i++){
			if(str.split(String.valueOf(str.charAt(i))).length==2)
					return new Character(str.charAt(i));
		}
		return null;
	};
0 请登录后投票
   发表时间:2010-04-15  
呵呵,和我的一个见过的题目很相似的给一个任意字符组成的字符串统计每个字符出现的次数
0 请登录后投票
   发表时间:2010-04-16  
chenyulong1 写道
楼主,方法名是FirstNoRepeated吧!

写了个看看行不行:

public static Character FirstNoRepeated(String str){
		for(int i=0;i<str.length();i++){
			if(str.split(String.valueOf(str.charAt(i))).length==2)
					return new Character(str.charAt(i));
		}
		return null;
	};

你的方法也挺好的,但是不知道谁的执行效率高!
0 请登录后投票
   发表时间:2010-04-16  
看到了Character到char的装箱拆箱,就知道这个代码与高效两个字无关了.
0 请登录后投票
   发表时间:2010-04-16  
拿空间换效率咯。。构造Hashset
0 请登录后投票
   发表时间:2010-04-16  
sw1982 写道
拿空间换效率咯。。构造Hashset

具体怎么换了?
0 请登录后投票
   发表时间:2010-04-16  
ysen 写道
chenyulong1 写道
楼主,方法名是FirstNoRepeated吧!

写了个看看行不行:

public static Character FirstNoRepeated(String str){
		for(int i=0;i<str.length();i++){
			if(str.split(String.valueOf(str.charAt(i))).length==2)
					return new Character(str.charAt(i));
		}
		return null;
	};

你的方法也挺好的,但是不知道谁的执行效率高!


效率高不高测试一下就知道了。

记得有句话很经典:内存越来越便宜,程序员却越来越贵。

代码越是简单明了越好,对于这个题来说,突出的是“第一个”无重复的字符。所以用这种方法可能会减少操作的次数,比方说HELLO WORLD这里第一个H就是无重复的了。

如果需要更多的功能扩展,那当然是放在MAP里好。
0 请登录后投票
   发表时间:2010-04-16  
public static Character getFristChar2(String arg){
for( int i = 0 ; i < arg.length() ; i++){
if(arg.indexOf(String.valueOf(arg.charAt(i))) == arg.lastIndexOf(String.valueOf(arg.charAt(i)))){
return arg.charAt(i);
}
}
return null;
}

以前看的一个帖子的东西
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics