找出字符串中第一个不重复的字符

找出字符串中第一个不重复的字符

leetcode原题地址

我的解决方法

  1. 将字符串转换成字符数组
  2. 使用两层循环遍历,最终根据第二层循环退出时的下标值来判断是否是不重复的字符
我的代码:
    public int firstUniqChar(String s) {
        char[] temp = s.toCharArray();
        int length = temp.length;
        int j,i;
        int result =0;
        for(i=0 ; i < length; i++){
            for(j= 0; j < length; j++){
                if(i == j ){continue;}
                if(temp[i] == temp[j]){
                    break;
                }
            }
            if(j == length){
                result = i;
                break;
            }
        }
        if( i == length){
            result = -1;
        }
        return result;
    }

缺点

时间复杂度高 O(n2)


优秀解法

在给出的字符串中查找26个英文字母第一次和最后一次出现的位置,如果两次位置相同则表明该字符没有重复。

需要注意的地方:

1.每次找到的字符位置不一定是该字符串中第一个不重复的字符,因此只有对26个字母都查找一边,每次记录下字符出现的位置,最终取最小值,才能得到第一次不重复出现的字符位置。

执行效率更高的代码:
        public int firstUniqChar(String s) {
        int start;
        int end;
        int result = s.length();
        for(char ch='a';ch<='z';ch++) {
            start = s.indexOf(ch);
            end = s.lastIndexOf(ch);
            if(start == end && start != -1) {
                result = Math.min(result,start);
            }
        }
        if(result == s.length()) {
            return -1;
        }
        return result;
    }

此处题目引用自leetcode,较好算法引自leetcode执行时间最短的提交。

你可能感兴趣的:(算法学习例子)