zoukankan      html  css  js  c++  java
  • 剑指offer--第一个只出现一次的字符

    /**
     * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
     */
    package javabasic.nowcoder;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class Main39 {
    	
    	/*
    	 * 256代表所有的数字与大小写字母的总和,用一个数组来记录每一个字符串内容的次数就能解答。
    	 */
    	public int FirstNotRepeatingCharIII(String str) {
    		if(str.length()<=0||str==null) {
    			return -1;
    		}
    		
    		char[] ch = str.toCharArray();
    		int[] record = new int[256];
    		for(int i=0;i<ch.length;i++) {
    			record[ch[i]]++;
    		}
    		
    		for(int i=0;i<ch.length;i++) {
    			if(record[ch[i]]==1) {
    				return i;
    			}
    		}
    		
    		return 0;
        }
    	
    	/*
    	 * 利用map映射,存值与次数,再遍历将次数为1的取出,但是由于map是无序的,所以不能保证是字符串中第一个无重复,有点bug
    	 */
    	public int FirstNotRepeatingCharII(String str) {
    		if(str.length()<=0||str==null) {
    			return -1;
    		}
    		Map<Character,Integer> record = new HashMap<Character,Integer>();
    		char[] ch = str.toCharArray();
    		
            for(int i=0;i<ch.length;i++) {
            	if(!record.containsKey(ch[i])) {
            		record.put(ch[i], 1);
            	}else {
            		record.put(ch[i], record.get(ch[i])+1);
            	}
            }
            
            for(int i=0;i<ch.length;i++) {
            	if(record.get(ch[i])==1) {
            		return i;
            	}
            }
            
    		return 0;
        }
    	
    	/*
    	 * 自己写的一个时间复杂度高的
    	 * 将每一位依次和原来的自己作比较,唯一值得注意的是要记得排除与本身比较
    	 */
    	public int FirstNotRepeatingChar(String str) {
    		if(str.length()<=0||str==null) {
    			return -1;
    		}
            for(int i=0;i<str.length();i++) {
            	if(onlyOne(str.charAt(i),str,i)) {
            		return i;
            	}
            }
            
    		return 0;
        }
    	
    	private boolean onlyOne(char charAt, String str, int i2) {
    		for(int i=0;i<str.length();i++) {
    			if(i==i2) {
    				continue;
    			}
    			if(charAt==str.charAt(i)) {
    				return false;
    			}
    		}
    		return true;
    	}
    
    	public static void main(String[] args) {
    		String str = "google";
    		int firstNotRepeatingChar = new Main39().FirstNotRepeatingCharIII(str);
    		System.out.println(firstNotRepeatingChar);
    	}
    }
    

      

  • 相关阅读:
    CentOS 6.4 利用 Awstats 7.2 分析 Nginx 日志
    CentOS 6.4 x64 postfix + dovecot + 虚拟用户认证
    配置日志logwarch 每天发送到邮箱
    CentOSx64 安装 Gearmand 和 Gearman php扩展
    Redis之基本介绍
    Synchronized锁的基本介绍
    Lock的基本介绍
    java之threadlocal的使用
    Java之事务的基本应用
    linux之cp和scp的使用
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/9081614.html
Copyright © 2011-2022 走看看