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

一开始我的想法是利用桶的思想,定义一个26大小的数组,对应字母a到z,然后遍历字符串,让数组对应位置里的值加一,最后统计出每个字母出现的次数,然后遍历arr数组,找到大小为1的,就是仅出现一次的字符。

但是发现程序还是不行。然后发现这时会出现次序问题,题目中要求的是第一次出现仅一次的。那么我们可以再遍历一遍字符串,然后找到数量为1的,自然就是第一次出现并且仅出现一次的字符了。并且题目说了字符串长度小于100000,两次都是单层循环,时间也是没什么问题的。

cpp 复制代码
#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";
	}

}
相关推荐
不会C语言的男孩1 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
sulikey1 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
云泽8082 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
XGeFei3 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
wlsh153 小时前
Go 迭代器
算法
Tri_Function3 小时前
简单图论大学习
c++
语戚3 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
lqqjuly3 小时前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23
CS创新实验室4 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
王老师青少年编程4 小时前
信奥赛C++提高组csp-s之FHQ Treap
c++·csp·平衡树·信奥赛·csp-s·提高组·fhq treap