题目描述
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
双重循环遍历,暴力求解
双重for循环遍历,将两个一样的值赋为'$',最后在原串中找出第一个非'$'的字符
public class Solution {
public int FirstNotRepeatingChar(String str) {
int flag=-1;
int length=str.length();
if(length<=0) return -1;
if(length>=1&&length<=1000){
char [] ch=str.toCharArray();
for(int i=0;i<length;i++){
char wechar=ch[i];
for(int j=0;j<length;j++){
if(wechar==ch[j]&&(i!=j)){
ch[i]='$';
ch[j]='$';
}
}
}
for(int i=0;i<length;i++){
if(ch[i]!='$'){
flag=i;
break;
}
}
}
return flag;
}
}
数组下标唯一性
将字符作为数组的下标,放进arr数组中,将下标所对应的值++操作,最后找出只出现一次的那个数(感觉有bug,但是在牛客平台能编译通过)
public class Solution {
public int FirstNotRepeatingChar(String str) {
int arr[]=new int[128];
for(int i=0;i<str.length();i++){
arr[str.charAt(i)]++;
}
for(int i=0;i<str.length();i++){
if(arr[str.charAt(i)]==1){
return i;
}
}
return -1;
}
}
利用HashMap的containsKey()方法
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
HashMap<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<str.length();i++){
char ch=str.charAt(i);
if(map.containsKey(ch)){
int time=map.get(ch);
time++;
map.put(ch,time);
}else{
map.put(ch,1);
}
}
for(int i=0;i<str.length();i++){
if(map.get(str.charAt(i))==1)
return i;
}
return -1;
}
}