面试题之在字符串中查找出第一个只出现一次的字符的位置
样例:比如“abcdabc”,第一个只出现一次的字符为d,位置为3
解决方案1:O(n*n)的复杂度
遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符相同的字符。则当前字符为第一个 只出现一次的字符。
解决方案2:O(n)的复杂度
采取空间换时间的策略
开一个辅助数组,做哈希映射
第一次扫描时,更新在辅助数组中当前字符出现的次数。
hash查找的时间复杂度为o(1)。
第二次扫描时,在辅助数组中通过查辅助数组看当前字符是否只出现了一次,从头到尾的顺序遍历保证了“第一个”,辅助数组的查找保证了“只出现一次”。
code:
#include <bits/stdc++.h> using namespace std; int main() { string str="abcdabc"; //在字符串中查找出第一个只出现一次的字符 //o(n) 空间换时间 int a[300]; memset(a,0,sizeof(a)); //第一次遍历 统计各字符出现次数 for(int i=0;i<str.length();i++) { a[str[i]]++; } //第二次遍历 辅助数组做哈希映射 int pos=-1; for(int i=0;i<str.length();i++) { if(a[str[i]]==1) { pos=i; break; } } cout<<pos<<endl; return 0; }
心之所向,素履以往
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-03-04 KMP算法之从懵逼到入门