java字符串10000位,在一个字符串(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

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 list = new ArrayList();

for(int i=0;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

a[c[i]-'A']=a[c[i]-'A']+1;

for(int i=0;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

a[c[i]-'A']+=1;

for(int i=0;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

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

if((int)hash.get(c[i])==1)

return i;

return -1;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值