剑指OFFER之第一个只出现一次的字符(九度OJ1283)

题目描述:


在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。

输入:

输入有多组数据
每一组输入一个字符串。

输出:

输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。

样例输入:
ABACCDEFF
AA
样例输出:
1
-1

解题思路:

  首先考虑到时间复杂度,对字符串进行排序或者双层扫描都会到达O(nlong)---O(n^2)的地步。

  所以我们考虑额外使用一个数组进行计数,线性时间扫描数组,然后再按照原来的顺序扫描数组找到次数为1的,进行输出。

for(i=0;i<length;i++){
            cnt[c[i]-‘A‘]++;
        }
        for(i=0;i<length;i++){
            if(cnt[c[i]-‘A‘] == 1){
                num = i;
                break;
            }
        }

全部代码

#include <stdio.h>
#include <string.h>
int main(){
    int i;
    char c[10000];
    int cnt[24];
    while(scanf("%s",&c)!=EOF){
        memset(&cnt,0,sizeof(int)*24);
        int num = -1;
        int length = strlen(c);
        for(i=0;i<length;i++){
            cnt[c[i]-‘A‘]++;
        }
        for(i=0;i<length;i++){
            if(cnt[c[i]-‘A‘] == 1){
                num = i;
                break;
            }
        }
        printf("%d\n",num);
    }
    return 0;
}
/**************************************************************
    Problem: 1283
    User: xhalo
    Language: C
    Result: Accepted
    Time:20 ms
    Memory:912 kb
****************************************************************/

剑指OFFER之第一个只出现一次的字符(九度OJ1283)

时间: 2024-10-07 11:40:46

剑指OFFER之第一个只出现一次的字符(九度OJ1283)的相关文章

【剑指offer】第一个只出现一次的字符

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 处理字符串中重复或者次数出现等问题,最常用的就是哈希表,用字符串中的字符作为key,

剑指offer (35) 第一个只出现一次的字符 字符哈希表

题目:在字符串中找出第一个只出现一次的字符 题解分析:用空间换时间,使用哈希表,key为字符,value是该字符出现的次数 字符是一个长度为8的数据类型,因此总共只有256种可能,我们可以创建一个长为256的数组, 每个字符根据其ASCII码值作为数组的下标,即哈希表的key,而相应数组位置存储每个字符出现的次数,即哈希表的value char GetFirstOnce(const char* str) { assert(str != NULL); const int hashSize = 25

【剑指Offer】第一个只出现一次的字符位置

问题描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始. 示例: 输入:sabcdsdf 输出:1 算法描述 定义一个52个元素的整型数组aCount,初始化为0,每个字母(大小写)依次对应一个,记录字母出现的次数: 定义一个52个元素的整型数组aPos,初始化为-1,每个字母(大小写)对应一个,记录字母第一次出现的位置: 每次遍历一个到字母,aCount数组里对应字母加1,判断目前aCount数组里该字

《剑指offer》第一个只出现一次的字符位置

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出

[剑指offer] 34. 第一个只出现一次的字符

题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 一次遍历存储到哈希表 一次遍历取Value为1的第一个字符的索引 class Solution { public: int FirstNotRepeatingChar(string str) { int len = str.size(); if (len == 0) return -1; map<char, int> ma

剑指offer[34]——第一个只出现一次的字符

题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 这道题目我的思路很简单,就是遍历字符串,然后判断遍历到的字母是否在它之前和之后的字符串出现过,没有的话就直接返回,有的话就继续计算. function FirstNotRepeatingChar(str) { const _length = str.length; if(_length==0){return -1;} let temp

【剑指offer】第一个只出现一次的数

def FirstNotRepeatingChar(string): hashStr = [0] * 256 for c in string: hashStr[ord(c)] += 1 for c in string: if hashStr[ord(c)] == 1: return c 这里说下ord, 可以作为atoi来用,功能是若给定的参数是一个长度为1的字符串,那么若参数是Unicode对象,则返回对应的整数,若为8-bit的string,则返回对应的值. python的帮助文档里举例:

剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)

题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. 输入: 每个测试案例包括2行: 第一行输入一个整数n(1<=n<=100000),表示数组中元素的个数. 第二行输入n个整数,表示数组中的每个元素,这n个整数的范围是[1,1000000000]. 输出: 对应每个测试案例,输出出现的次数超过数组长度的一半的数,如果没有输出-1. 样例输入:

剑指OFFER之打印1到最大的N位数(九度OJ1515)

题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 解题思路: 直接通过n快速指定比最大的那个数大1的数,10,100,1000,10000,100000.... 输出,就行了... 代码: #include <stdio.h> int main(void){ int