面试题之在字符串中查找出第一个只出现一次的字符的位置

样例:比如“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;
}
复制代码

 

posted @   西*风  阅读(4652)  评论(0编辑  收藏  举报
编辑推荐:
· 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算法之从懵逼到入门
点击右上角即可分享
微信分享提示