剑指offer系列源码-第一个只出现一次的字符

题目1283:第一个只出现一次的字符
时间限制:1 秒内存限制:32 兆特殊判题:否提交:1408解决:793
题目描述:
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
输入:
输入有多组数据
每一组输入一个字符串。
输出:
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
样例输入:
ABACCDEFF
AA
样例输出:
1
-1
#include <iostream>
#include<stdio.h>
#include<string>
using namespace std;

int main(){
    string str;
    while(cin>>str){
        int* ch = new int[256];
        for(int i=0;i<256;i++){
            ch[i] = 0;
        }
        for(int i=0;i<str.length();i++){
            ch[str[i]]++;
        }
        int i=0;
        for(;i<str.length()&&ch[str[i]]!=1;i++){
        }
        if(i==str.length()){
            printf("-1\n");
        }else{
            printf("%d\n",i);
        }
    }
    return 0;
}

时间: 2024-11-09 03:11:55

剑指offer系列源码-第一个只出现一次的字符的相关文章

剑指offer系列源码-数组中只出现一次的数字

题目1351:数组中只出现一次的数字 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2582解决:758 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组大小.2<=n <= 10^6. 第二行包含n个整数,表示数组元素,元素均为int. 输出: 对应每个测试案例,输出数组中只出现一次的两个数.输出的数字从小到大的顺序. 样例输入: 8 2 4 3 6 3 2 5 5

【剑指Offer】34、第一个只出现一次的字符

题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写) 题解一:HashMap 1 public static int FirstNotRepeatingChar(String str) { 2 Map<Character, Integer> map = new HashMap<>(); 3 if(str==null){ 4 return 0; 5 } 6 char[

剑指offer系列源码-反转链表

题目1518:反转链表 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1952解决:741 题目描述: 输入一个链表,反转链表后,输出链表的所有元素. (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数. 输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素. 输出: 对应每个测试案例, 以此输出链表反转后的元素,如没有元素则输

剑指offer系列源码-合并两个排序的链表

题目1519:合并两个排序的链表 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1309解决:615 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数. 下面

剑指offer系列源码-和为S的两个数字

题目1352:和为S的两个数字 时间限制:2 秒内存限制:32 兆特殊判题:否提交:2651解决:668 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输入: 每个测试案例包括两行: 第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和.其中1 <= n <= 10^6,k为int 第二行包含n个整数,每个数组均为int类型. 输出: 对应每个测试案例,输出两个数,小的先输出.如果找不到

剑指offer系列源码-数组中的逆序对

题目1348:数组中的逆序对 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2133解决:500 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组中的元素个数.其中1 <= n <= 10^5. 第二行包含n个整数,每个数组均为int类型. 输出: 对应每个测试案例,输出一个整数,表示数组中的逆序对的总数. 样例输入: 4 7 5 6 4

剑指offer系列源码-包含min函数的栈

题目1522:包含min函数的栈 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1495解决:476 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数. 接下来有n行,每行开始有一个字母Ci. Ci='s'时,接下有一个数字k,代表将k压入栈. Ci='o'时,弹出栈顶元素. 输出: 对应每个测

剑指offer系列源码

两个链表的第一个公共结点 两个链表相交成Y型. #include <iostream> #include <stdio.h> using namespace std; struct ListNode{ int value; ListNode* next; }; unsigned int getListLength(ListNode* pHead){ unsigned int length = 0; ListNode* pNode = pHead; while(pNode){ len

剑指offer系列源码-最大子向量和(连续子数组的最大和)

题目1372:最大子向量和(连续子数组的最大和) 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2169解决:570 题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)