一本通网站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";
	}

}
相关推荐
leiming62 小时前
C++ vector容器
开发语言·c++·算法
Xの哲學3 小时前
Linux流量控制: 内核队列的深度剖析
linux·服务器·算法·架构·边缘计算
yaoh.wang3 小时前
力扣(LeetCode) 88: 合并两个有序数组 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
小智RE0-走在路上4 小时前
Python学习笔记(8) --函数的多返回值,不同传参,匿名函数
笔记·python·学习
apocelipes4 小时前
从源码角度解析C++20新特性如何简化线程超时取消
c++·性能优化·golang·并发·c++20·linux编程
LYFlied4 小时前
【每日算法】 LeetCode 56. 合并区间
前端·算法·leetcode·面试·职场和发展
ozyzo4 小时前
求1~n的累加和
c++
摇滚侠4 小时前
Redis 零基础到进阶,Redis 哨兵监控,笔记63-73
数据库·redis·笔记
艾醒4 小时前
大模型原理剖析——多头潜在注意力 (MLA) 详解
算法
艾醒4 小时前
大模型原理剖析——DeepSeek-V3深度解析:671B参数MoE大模型的技术突破与实践
算法