暴力求解,遍历字符串判断当前字符是否出现过
解法1:设置flag标记数组标记状态,如果当前字符未出现过且判断已经到达末尾,则只出现过一次
public class Solution {
public int FirstNotRepeatingChar(String str) {
boolean flag[]=new boolean[str.length()];
for(int i=0;i<str.length();i++){
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j)){
flag[j]=true;flag[i]=true;//不符合题意,标记为重复字符
break;//跳出当前循环开始下一个字符的判断
}
if(j==str.length()-1&&str.charAt(i)!=str.charAt(j)&&flag[i]==false){
return i;//判断已经到达字符末尾且当前字符还未出现过,符合
}
}
}
return -1;//全都重复
}
}解法2:用哈希表存储字符串每个字符出现的次数,然后从前往后遍历字符串,找出第一个出现次数次数为一的字符
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
HashMap<Character,Integer> map=new HashMap();
for(int i=0;i<str.length();i++){//遍历字符串,hashmap的key保存字符,value为出现的次数
if(map.containsKey(str.charAt(i))){
int count=map.get(str.charAt(i))+1;
map.put(str.charAt(i),count);
}
else{
map.put(str.charAt(i),1);
}
}
for(int i=0;i<str.length();i++){//寻找第一个出现一次的字符
if(map.get(str.charAt(i))==1){
return i;
}
}
return -1;
}
}


京公网安备 11010502036488号