第一个只出现一次的字符

C++ 找第一个只出现一次的字符 C++ 找第一个只出现一次的字符 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入 一个字符串,长度小于100000。 输出 输出第一个仅出现一次的字符,若没有则输出no。 样例输入 abcabd 样例输出 c 这道题利用的是桶排序的算法,计算出有没有重合数组详情在代码中说 #includ... 阅读详情
题目:
在字符串中找出第一个只出现一次的字符。如输入“ababbdeff”,则输出‘b’。

将字符串遍历两次,第一次遍历会将字符串中各字符的出现次数统计到哈希表中,第二次遍历,找到字符串中第一个只出现一次的字符。

class Solution
{
public:
    int FirstNotRepeatingChar( string str )
    {
        int len = str.size();
        int array[256] = { 0 };
        for ( int i = 0; i < len; i++ )
        {
            array[(int)str[i]]++;
        }
        for ( int i = 0; i < 256; i++ )
            cout << array[i] << " ";
        cout << endl;
        for ( int i = 0; i < len; i++ )
        {
            if ( array[(int)str[i]] == 1 )
                return i;
        }
        return -1;
    }
};
拓展:

如果输入的字符串中不只有英文字母,可以考虑使用map代替哈希表来储存键值对。

相关题目:
一、输入两个字符串,从第一个字符串中删除在第二个字符串中出现过的所有字符。
class Solution
{
public:
    void deleteWordInStringTwo( string &str1, string &str2 )
    {
        int array[256] = { 0 };
        for ( int i = 0; i < str2.size(); i++ )
            array[ (int)str2[i] ]++;
        for ( int i = 0; i < str1.size(); i++ )
        {
            if ( array[ (int)str1[i] ] > 0 )
            {
                str1.erase( i, 1 );
                i--;   //string中erase一个字符,其他后续字符的下标自动减一
                        //如果没有这个操作,会使得处理时跳过一个字符
            }
        }
    }
};

int main( void )
{
    Solution sos;
    string str1 = "We are student.";
    string str2 = "aeiou";
    sos.deleteWordInStringTwo( str1, str2 );
    cout << str1 << endl;
    return 0;
}
二、输入一个字符串,删除该字符串中所有重复出现的字符。
class Solution
{
public:
    void eraseAllRepeatWord( string &str )
    {
        bool array[256] = { false };

        for ( int i = 0; i < str.size(); i++ )
        {
            if ( array[ (int)str[i] ] == false )
            {
                array[ (int)str[i] ] = true;
            }
            else 
            {
                str.erase( i, 1 );
                i--;    //同理如上
            }
        }

    }
};

int main( void )
{
    string str = "google";
    Solution sos;
    sos.eraseAllRepeatWord( str );
    cout << str << endl;
    return 0;
}
三、输入两个字符串,判断是不是互为变位词。(变位词:英语中如果两个单词中出现的字母相同,并且每个字母出现的次数相同,那么这两个单词互为变位词。)

有两种算法:
一、先将两个字符串排序,然后判断两个字符串是否相等。排序的时间复杂度为logn,判断相等时间复杂度为O(n)。所以这种算法的时间复杂度应该为O(n)

class Solution
{
public:
    bool isAnagram( string str1, string str2 )
    {
        if ( str1.size() != str2.size() )
            return false;
        sort( str1.begin(), str1.end() );        
        sort( str2.begin(), str2.end() );
        cout << str1 << " " << str2 << endl;
        int result = strcmp( str1.c_str(), str2.c_str() );
        if ( result == 0 )
            return true;
        else 
            return false;
    }
};


int main( void )
{
    Solution sos;
    string str1 = "silentss";
    string str2 = "listen";
    cout << sos.isAnagram( str1, str2 ) << endl;
    return 0;
}

二、借助hash表,这种算法需要分别扫描两个字符串一次,并且要借助辅助空间。时间复杂度为O(n).

class Solution
{
public:
    bool isAnagram( string str1, string str2 )
    {
        if ( str1.size() != str2.size() )
            return false;
        int hashStr[256] = { 0 };

        for ( int i = 0; i < str1.size(); i++ )
        {
            hashStr[ (int)str1[i] ]++;
            hashStr[ (int)str2[i] ]--;
        }
        for ( int i = 0; i < 256; i++ )
        {
            if ( hashStr[i] != 0 )
                return false;
        }
        return true;
    }
};

int main( void )
{
    string str1 = "silent";
    string str2 = "listen";

    Solution sos;

    cout << sos.isAnagram( str1, str2 ) << endl;

    return 0;
}
找字符串中第一个只出现一次的字符。 方法一(不要求时间复杂度,只要求做出来) 两次循环嵌套,遍历字符串。 int find_one(char str[], int len) { int i = 0; int j = 0; int count = 0; for (i = 0; i < len; i++) { for (j = 0; j < len; j++) { if (str[i] == str[... 阅读详情

相关推荐

LeetCode——第一个只出现一次的字符(Map)

题目描述 题目主要是让我们找到第一个只出现一次的字符,如果没有并不是返回为空字符串,而是单空格,这个地方容易出错,大家一定要注意。 解题思路 博主原本想使用set来实现的,出现第二次就将其从set中去除,但是这种方法无法应对出现三次或者五次等奇数的情况。,因此后来采用了最简单的方法map遍历,然后将其次数存储到map的value中,key则是每一个单字符。 如果传入的参数是一个空字符串,则染回单空格。 初始化一个map,遍历每一个字符,并更新字符出现的次数。 遍历map的每一个item,如果it

Always-Learning 7581

找第一个只出现一次的字符

描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入 一个字符串,长度小于100000。 输出 输出第一个仅出现一次的字符,若没有则输出no。 样例输入 abcabd 样例输出 c 代码: #include #include using namespace std; int main() { char a[1

d202x的博客 8979

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

02:找第一个只出现一次的字符

02:找第一个只出现一次的字符 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入一个字符串,长度小于100000。 输出输出第一个仅出现一次的字符,若没有则输出no。 样例输入 abcabd 样例输出 c #in

ljf_study的博客 1249

别再为reg2icg的setup违例头疼了!手把手教你用ICC2/Innovus这3招搞定(附实战数据对比)

本文详细介绍了在ICC2/Innovus中解决reg2icg的setup违例的三种高效方法,包括早期时钟树预估、精准控制时钟延迟与门控检查以及ICG专用优化选项组合。通过实战数据对比,展示了不同策略的效果差异,帮助工程师快速优化时序路径,提升芯片性能。

weixin_42569329的博客 409

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

字符串中第一个只出现一次的字符

题目描述 在字符串中找出第一个只出现一次的字符。 如输入"abaccdeff",则输出b。 如果字符串中不存在只出现一次的字符,返回#字符。 样例 Input:"abaccdeff" Output:'b' 解题思路 描述 本题目就是一个简单的模拟题。 首先统计各字符出现次数,然后找到第一个出现次数为一的字符,返回即可。 实现代码: /* 包含头文件: #include <unord...

YangLei253的博客 480

如何用Lmcache+vllm优化KVcache存储?CPU与SSD性能实测对比

本文通过实测对比,详细介绍了如何利用Lmcache+vLLM将大模型推理中的KV Cache卸载至CPU内存或SSD硬盘,以解决长上下文场景下的GPU显存瓶颈。测试数据显示,CPU卸载方案在首字延迟(TTFT)上显著优于SSD方案,但SSD方案在存储成本上更具优势。文章提供了完整的配置指南、性能数据分析和生产环境选型建议。

fire9的博客 988

第一个只出现一次的字符——js

第一个只出现一次的字符 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路 用map记录出现的次数 新建一个对象,其中key用来存放字符,value用来存放该字符出现的次数; 第一次循环,将所有字符和对应出现的次数存放在map中,时间复杂度为0(n); 第二次循环找到value为1...

qq_40608516的博客 858

二维otsu算法python_OpenCV-Python系列之OTSU算法

上一个教程中,我们谈到了关于图像二值化的两种方法,一种是固定阈值法,另一种是自适应阈值法,总的来说,自适应阈值法在某些方面要由于固定阈值法,但还没完,这次我们将隆重介绍我们的重量级选手,也就是OTSU算法(又称为大津算法和最大类间方差法)。最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像...

weixin_28834169的博客 1426

python 成语接龙-连接数据库

from xpinyin import Pinyin import pymysql while 1: conn = pymysql.connect( host='localhost', #本地连接 user='root', #数据库账户名 password='password', #数据库密码 db='dic',

Hero2902的博客 598

字符串中第一个只出现一次的字符。在字符串中找出第一个只出现一次的字符。

面试题35:第一个只出现一次的字符 1.题目描述 题目:字符串中第一个只出现一次的字符。在字符串中找出第一个只出现一次的字符。 例如,如输入"abaccdeff",则输出b。 2.题目分析 由于题目与字符出现的次数相关,那么我们是不是可以统计每个字符在该字符串中出现的次数?要达到这个目的,我们需要一个数据容器来存放每个字符的出现次数。在这个数据容器中,可以根据字符来查找它出现的次数,也就是说这个容器的作用是把一个字符映射成一个数字。在常用的数据容器中,哈希表正是这个用途。 为了解决这个问题,我

ThinPikachu的博客 642

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1572

Lintcode:第一个只出现一次的字符

问题: 给出一个字符串,找出第一个只出现一次的字符。 样例: 样例 1: 输入: "abaccdeff" 输出: 'b' 解释: 'b' 是第一个出现一次的字符 样例 2: 输入: "aabccd" 输出: 'b' 解释: 'b' 是第一个出现一次的字符 python: class Solution: """ @param str:...

观月执白 264

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

本文介绍了WinForm开发中OpenFileDialog控件的关键属性及其应用。OpenFileDialog是.NET Framework提供的文件对话框控件,主要用于选择、打开文件操作。文章详细讲解了11个核心属性:AddExtension(自动补全扩展名)、AutoUpgradeEnabled(外观升级)、CheckFileExists/CheckPathExists(文件/路径存在验证)、DefaultExt(默认扩展名)、DereferenceLinks(解析快捷方式)、FileName/File

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1534

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言——第一个只出现一次的字符

一、问题描述(来源:计蒜客) 二、思路一 从字符串的第二个字母开始循环,如果后续有相同的字母,则将后面相同的字母删除,该删除字母后面的字母全部往前移一位。一轮循环完后,再将开头的字母删除(如果该字母有重复)。如果后面没有找到与这个字母相同的字母,就结束循环,打印字符串的第一个字母;如果检测到这个字符串是空的,则打印no。 注:这种方法比较复杂,代码运行耗时较长,而且有几个地方不注意容易出...

仰望星空 4216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[剑指offer]-字符流中第一个只出现一次的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 思路:类似于[第一次只出现一次的字符](https://blog.youkuaiyun.com/yuemingyan...

yuemingyang7010的博客 357

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

找出字符串中第一个只出现一次的字符

题目描述:   找出字符串中第一个只出现一次的字符 输入描述:   输入几个非空字符串 输出描述:   输出第一个只出现一次的字符,如果不存在输出-1 示例 输入:asdfasdfo    aaoo 输出:o    -1 题目分析:   1、首先我们看到示例的输入是多行输入,所以我们在写输入函数的时候就要使用getline函数来防止因回车导致的数据失效。   2、我们从示例输入代码的第一个字符a看起,a在后面还出现过,不符合只出现一次,所以来到第二个字符s,s也在后续出现了,… … …依次往后走,来到了.

小东的博客 2810

B2110 找第一个只出现一次的字符

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

m0_46192147的博客 1184

AcWing 63. 字符串中第一个只出现一次的字符

题目描述 在字符串中找出第一个只出现一次的字符。 如输入"abaccdeff",则输出b。 如果字符串中不存在只出现一次的字符,返回#字符。 样例: 输入:"abaccdeff" 输出:'b' 问题分析 先统计字符串中各字符的出现次数,存入哈希map中。然后遍历字符串,当遇到某字符的出现次数为1时,返回该字符。如果遍历结束也没有返回,那么返回‘#’。 代码实现 class...

yj_coder的博客 283

【面试题】找出一个字符串中第一个只出现一次的字符的位置

问题:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 解答:可以用HashMap统计每个字符对应的次数,然后再遍历这个map找出第一个。代码如下: public int FirstNotRepeatingChar(String str) { if (str == null |...

u014259820的博客 7940

在字符串中查找第一个只出现一次的字符

在字符串中查找第一个只出现一次的字符。例如输入字符串"abaccdef",输出b,     分析:(1)创建一个数组,并初始化数组,                       (2)遍历字符串,把遇到的字符串的ACSII码值作为下标,后面每遇到一次,次数加一,              (3)遍历数组,如果遇到某个下标的次数为一则输出这个下标,如果只查找第一个,则输出一个就break  

xulu_258的专栏 2167
上一篇: 丑数
下一篇: 数组中的逆序对
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值