列表

详情


NC31. 第一个只出现一次的字符

描述

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)


数据范围:,且字符串只有字母组成。
要求:空间复杂度 ,时间复杂度

示例1

输入:

"google"

输出:

4

示例2

输入:

"aa"

输出:

-1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-04-18

#include<map>
class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        int n = str.size();
        if (n == 0)
            return -1;
        if (n == 1)
            return 0;
        for (int i = 0; i < n; i++){
            int flag = 0;
            for (int j = 0; j < n; j++){
                if (i != j && str[i] == str[j]){
                    flag = 1;
                    break;
                }
            }
            if (flag == 0)
                return i;
        }
        return -1;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-28

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        if(str.length()==0)
            return -1;
        for(int i=0;i<str.length()-1;i++)
            if(str.find_last_of(str[i])==i && str.find_first_of(str[i])==i)
                return i;
        return -1;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-20

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        if(str.length()==0){
            return -1;
        }
        for(int i=0;i<str.length()-1;i++){
            if(str.find_last_of(str[i])==i && str.find_first_of(str[i])==i){
                return i;
            }
        }
        return -1;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-19

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        if(str.length()==0) return -1;
        vector<int> count(58,0);
        for(int i=0;i<str.length();i++){
            count[str[i]-'A']++;
        }
        for(int i=0;i<str.length();i++){
            if(count[str[i]-'A']==1) return i;
        }
        return -1;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-15

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        for(int i = 0; i < str.size(); i++){
            char record = str[i];
            for(int j = i + 1; j < str.size(); j++){
                if(record == str[j]){
                    str[j] = -1;
                    str[i] = -1;
                }
            }
        }
        for(int i = 0; i < str.size(); i++){
            if(str[i] != -1){
                return i;
            }
        }
        return -1;
    }
};

上一题