题解 | #第一个只出现一次的字符#

第一个只出现一次的字符

http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c

暴力求解,遍历字符串判断当前字符是否出现过
解法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;
    }
}
全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务