在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
方案一:用52的数组来存,之后要在找到的位置中找个最小的
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str.length()==0)
return -1;
int a[]=new int[52];
char c[]=str.toCharArray();
int index=0;
for(int i=0;i<c.length;i++){
if(c[i]<="Z"){
index = c[i]-"A";
a[index]=a[index]+1;
}
else{
index=c[i]-"a"+26;
a[index]=a[index]+1;
}
}
int temp=0;
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<a.length;i++){
if(a[i]==1)
for (int j = 0; j < c.length; j++)
if (i < 26) {
temp =c[j]-"A";
if (temp== i) {
list.add(j);
break;
}
}
else {
temp =c[j]-"a"+26;
if(temp==i) {
list.add(j);
break;
}
}
}
if(list.isEmpty())
return -1;
else
return Collections.min(list);
}
}
import java.util.*; public class Solution { public int FirstNotRepeatingChar(String str) { if(str.length()==0) return -1;
int a[]=new int["z"-"A"];
char c[]=str.toCharArray();
for(int i=0;i<c.length;i++)
a[c[i]-"A"]=a[c[i]-"A"]+1;
for(int i=0;i<c.length;i++)
if(a[c[i]-"A"]==1)
return i;
return -1;
}
}
//方案二:一样的道理
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str.length()==0)
return -1;
int a[]=new int["z"-"A"+1];
char c[]=str.toCharArray();
for(int i=0;i<c.length;i++)
a[c[i]-"A"]+=1;
for(int i=0;i<c.length;i++)
if(a[c[i]-"A"]==1)
return i;
return -1;
}
}
//方案三
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str.length()==1)
return -1;
Hashtable hash =new Hashtable();
char c[]=str.toCharArray();
for(int i=0;i<c.length;i++){
if(hash.get(c[i])==null)
hash.put(c[i],1);
else
hash.put(c[i],(int)hash.get(c[i])+1);
}
for(int i=0;i<c.length;i++)
if((int)hash.get(c[i])==1)
return i;
return -1;
}
}