java-17-在一个字符串中找到第一个只出现一次的字符



public class FirstShowOnlyOnceElement {

/**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
* 1.int[] count:count[i]表示i对应字符出现的次数
* 2.将26个英文字母映射:a-z <--> 0-25
* 3.假设全部字母都是小写
*/
public static void main(String[] args) {
String str="abaccdeff";
int index=find(str);
if(index!=-1){
char firstShowOnlyOnceElement=str.charAt(index);//charAt() source code:return value[index + offset];
System.out.println(firstShowOnlyOnceElement);
}

}

//return the index of firstShowOnlyOnceElement
public static int find(String str){
if(str==null||str.length()==0){
return -1;
}
int len=str.length();
char[] letters=str.toCharArray();
//In java,'char' is 16 bits,so there are 2^16 characters.
//But we deal with only the 26 English letters in this case.
int[] count=new int[26];//the 'HashTable'
for(int i=0;i<len;i++){
char curChar=letters[i];
count[curChar-'a']++;
}
for(int i=0;i<len;i++){
char curChar=letters[i];//iterate the string,not the HashTable
if(count[curChar-'a']==1){
return i;
}
}
return -1;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值