牛客网_剑指offer题集——第一次只出现一次的字符(java实现)

题目链接:

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路:利用ASCII码映射,将每个字符出现的次数以及最后出现的位置存储进二维数组,然后重新遍历二维数组,找出次数为1且出现位置最小的,返回此位置就ok,复杂度O(n)

实现源码;

package niuke;

/**
 * a-z:97-122
 * A-Z:65-90
 */
public class 第一个只出现一次的字符 {
    public int FirstNotRepeatingChar(String str) {
        if(str.length()==0||str==null)return 0;
        int[][] statistic = new int[53][2];
        //mapping ASCII,first is times,second is location
        char[] temp = str.toCharArray();
        for(int i = 0;i<temp.length;++i){
            if(temp[i]>=97) {
                int trans = temp[i] - 96;
                statistic[trans][0] += 1;
                statistic[trans][1] = i;
            }else{
                int trans = temp[i] - 38;
                statistic[trans][0] += 1;
                statistic[trans][1] = i;
            }
        }//statistic is over
        int min = 54;
//        char res = '#';
        for(int i = 1;i<53;++i){
            if(statistic[i][0]==1&&statistic[i][1]<min){
                min = statistic[i][1];
//                res = (char)i;
            }
        }
        if(min==54)
            return -1;
        else
            return  min;
    }
}

代码已AC

希望对大家有所帮助

以上

猜你喜欢

转载自www.cnblogs.com/lavender-pansy/p/12484956.html