【题目】在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。
* 若为空串,返回-1。位置索引从0开始
* 【思路】1 首先遍历字符串数组,添加字符和对应出现的次数,可以用HashMap(字符,对应出现的次数)来实现。
* 2 再遍历数组,当遍历到字符出现次数为1的时候,输出。

 package com.exe11.offer;
import java.util.HashMap;
import java.util.Map;
/**
* 【题目】在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。
* 若为空串,返回-1。位置索引从0开始
* 【思路】1 首先遍历字符串数组,添加字符和对应出现的次数,可以用HashMap(字符,对应出现的次数)来实现。
* 2 再遍历数组,当遍历到字符出现次数为1的时候,输出。
* @author WGS
*
*/ public class FirstNoRepeatingChar { public char firstNoRepeatingChar(String str){
if(str==null ||str.equals(""))
return ' ';
char[] ch=str.toCharArray();
Map<Character,Integer> map=new HashMap<Character,Integer>();
//1 遍历数组,添加字符串每个字符及字符对应的次数。首次出现设置次数为1,如果有就在原有次数上+1
for(char c:ch){
if(map.get(c)!=null){//map.get(c):看集合中字符(key)对应的次数(value)是否为0(null)
map.put(c, map.get(c)+1);//map.get(c)+1:字符c对应的次数不为0,即字符串中已有字符c,就在原有次数上+1
}else{
map.put(c, 1);//如果集合中没有c字符,就为第一次添加,次数设置为1
}
}
//2 重新遍历数组,获取第一个次数为1 的字符
for(int i=0;i<ch.length;i++){
if(map.get(ch[i])==1)
return ch[i];// 返回首次出现的字符
}
return 0; }
public static void main(String[] args) {
FirstNoRepeatingChar f=new FirstNoRepeatingChar();
//String str="abcdef";
//String str="abacdef";
//String str="abcdefabf";
String str="aabb";
char c=f.firstNoRepeatingChar(str);
System.out.println(c); } }
04-02 02:45