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

第一个只出现一次的字符

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;
    }
}
全部评论

相关推荐

好消息是活的像个人了,周末可以约会吃饭打游戏了坏消息是钱没了,当初来小红书就是为了钱啊哭笑不得😭
犯困嫌疑人:好事儿啊,取消大小周能有更多自己的时间,周末还能约对象玩,这不美滋滋?
投递小红书等公司6个岗位 > 小红书取消大小周
点赞 评论 收藏
分享
头像
03-25 16:22
南华大学 Java
不敢追175女神:你是打了上千个招呼吧?😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务