力扣——1.返回字符串中第一个唯一的字符;2.把字符串转换成整数(C++)

1.返回字符串中第一个唯一的字符

1.1题目描述

给定一个字符串s ,找到它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1

示例:

1.2思路

这里提供两种思路:第一种是利用哈希表,先遍历一遍字符串存到数组中++(a"下标为0,后面字母一次加1),遍历完后,对字符串进行遍历,再那去与数组该位置比较,是否为1,为返回该位置。(注意:第二遍遍历时,不能遍历数组,要不然可能出现,第一次唯一出现的字符为'z'但后面又出现'a'也是唯一出现,但不是第一个,但这时候就会返回a的位置)。

第二种是先遍历利用正序,反序寻找,利用find函数(这个函数是返回传入要找的字符第一次出现的下标,默认从0下标,开始从前向后找 )rfind函数(这个函数是返回传入要找的字符第一次出现的下标,默认开始从后向前找),找到是否为同一个位置,如果是,那说明这个字符只出现了一次,就直接返回,如果遍历完没找到就直接返回-1。

1.3代码

方法一:

cpp 复制代码
class Solution {
public:
    int firstUniqChar(string s) {
        int i=0;
        int count[26]={0};
        while(i<s.size())
        {
            count[s[i]-'a']++;
            ++i;
        }
        for(int j=0;j<s.size();j++)
        {
            if(count[s[j]-'a']==1)
                return j;
        }
        return -1;
    }
};

方法二:

cpp 复制代码
class Solution {

public:

  int firstUniqChar(string s) 

  {

    for(int i=0; i<s.size(); ++i)

    {

      int index = s.find(s[i]);

      int reverse_index = s.rfind(s[i]);  

      if(index == reverse_index)

        return i;

    }

    return -1;

  }

};

2把字符串转换成整数

2.1题目描述

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格

检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。

读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。

将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。

如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −2^31 ,大于 2^31 − 1 的整数应该被固定为 2^31 − 1

返回整数作为最终结果。

2.2思路

根据题目要求要排除字符串前面的空格,其次就是判断第一个符号位是否为负,所以这里定义一个下标,遇到就++,然后从这个位置,开始读,如果不是0~9字符就直接跳出循环,**其次还要注意:是否已经超出整型范围,所以可以定义这个数的时候用long long,再去和INT_MAX,INT_MIN比较,如果超出范围,就直接输出这个边界值,**没有超出范围,就返回这个值。

2.3代码

cpp 复制代码
class Solution {
public:
    int myAtoi(string str) {
        int i=0;
        while(str[i]==' ')
        {
            i++;
        }
        int flag=1;
        if(str[i]=='-')
        {
            flag=-1;
        }
        if(str[i]=='-'||str[i]=='+')
            i++;
        long long sum=0;
        for(;i<str.size();i++)
        {
            if(str[i]>='0'&&str[i]<='9')
            {                 
                sum=sum*10+(str[i]-'0');
                if(sum>INT_MAX)
                    return flag==1?INT_MAX:INT_MIN;

            }
            else
                break;
        }
        int ret=sum*flag;
        return ret;
    }
};
相关推荐
灰灰勇闯IT8 分钟前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk22 分钟前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou041235 分钟前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年1 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习
吴可可1231 小时前
Teigha处理CAD样条曲线的方法解析
数据库·算法·c#
啊董dong1 小时前
noi-2026年5月12号小测验
数据结构·c++·算法
不知名的忻1 小时前
红黑树(简易版)
算法·红黑树
NQBJT1 小时前
万字拆解 NeckFix:AI 脖子前倾检测的算法原理与工程实现
人工智能·算法
jaychouchannel1 小时前
Python 常用排序算法详解
算法
数智工坊1 小时前
【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
论文阅读·人工智能·算法·语言模型·机器人·无人机