题目描述

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

 

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        int n=str.length();
        if(n<1) return -1;
        if(n==1)	return 0;
        sort(str.begin(),str.end());
        int h=str[n-1]-str[0];
        vector <int > s;
        for(int i=0;i<n;i++) {
            s[str[i]]++;
        }
        int k;
        for(int j=0;j<h;j++){
            if(s[j]==1) {
                k=j;
                break;
            }
        }
        return k;
    }
};

  您的代码已保存
运行错误:请检查是否存在数组、列表等越界非法访问,内存非法访问等情况

 

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

  

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        int len=str.length();//也可以用size();
        if(len<1||len>10000) return -1;
        int hashmap[256]={0},i;
        for(i=0;i<len;i++){
            hashmap[str[i]]++;
        }
        for(i=0;i<len;i++){
            if(hashmap[str[i]]==1) return i;
        }
        return -1;
    }
};

  

 

/*
C++ 数组实现简单的哈希表进行存储 实现
哈希表是 每个字符的ASCII码作为键值,对应字符出现的次数作为元素
*/
class Solution {
public:
    int FirstNotRepeatingChar(string str) 
    {
        int strSize=str.size();
        if(strSize==0)
            return -1;//不存在
        vector<int> hashNum(256,0);//长度为256的数组,其元素全部为0,用于记录每个字符出现的次数
        int i;
        for(i=0;i<strSize;i++)
            hashNum[str[i]]++;//键值 为 str[i]的ASCII值 的次数+1
        for(i=0;i<strSize;i++)
            if(hashNum[str[i]]==1)
                break;
        if(i==strSize)
            return -1;
        return i;
    }
};

  

posted on 2017-08-16 21:11  王小东大将军  阅读(175)  评论(0编辑  收藏  举报