一本通网站1130:找第一个只出现一次的字符

一开始我的想法是利用桶的思想,定义一个26大小的数组,对应字母a到z,然后遍历字符串,让数组对应位置里的值加一,最后统计出每个字母出现的次数,然后遍历arr数组,找到大小为1的,就是仅出现一次的字符。
但是发现程序还是不行。然后发现这时会出现次序问题,题目中要求的是第一次出现仅一次的。那么我们可以再遍历一遍字符串,然后找到数量为1的,自然就是第一次出现并且仅出现一次的字符了。并且题目说了字符串长度小于100000,两次都是单层循环,时间也是没什么问题的。
#include<iostream>
using namespace std;
#include<string>
int main()
{string s1;getline(cin, s1);int arr[26] = { 0 };for (int i = 0; i < 26; i++){arr[i] = 0;}int num = 0;for (int i = 0; i < s1.length(); i++){num = s1[i] - 97;arr[num] += 1;}bool flag = 0;for (int i = 0; i < s1.length(); i++){if (arr[s1[i] - 97] == 1){cout << s1[i];flag = 1;break;}}if (!flag) {cout << "no";}}
