【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

这篇具有很好参考价值的文章主要介绍了【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

🎯个人博客:Dream_Chaser

🎈博客专栏:C++

📚本篇内容:仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

目录

917.仅仅反转字母 

题目描述:

387.字符串中的第一个唯一字符

题目描述:

HJ1 字符串最后一个单词的长度

输入描述:

输出描述:

125.验证回文串

题目描述:

415.字符串相加

题目描述:


917.仅仅反转字母 

题目链接:917. 仅仅反转字母 - 力扣(LeetCode)

题目描述:

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

题目示例:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

题目思路:

 使用begin和end两个指针,开始时begin指向字符串开头,end指针指向字符串末尾(’\0’的前一个字符)。当两指针同时指向字母时,应该立即进行交换,接着begin++,end--。若其中一个遇到非字母或者两个指针同时遇到非字母则跳过该字符,进行对应的++,-- 操作,重复上述步骤。当begin>end循环结束,返回 s .

起始图:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

动态过程: 

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

结果图:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

代码:

class Solution {
public:
    bool isLetter(char ch)
    {
        if(ch>= 'A' && ch<='Z')
            return true;
        if(ch>='a' && ch<='z')
            return true;
        return false;
    }
    string reverseOnlyLetters(string s) {
       int begin = 0,end=s.size()-1;
       while(begin<end)
       {
            //先写出判断条件,避免越界问题,再判断是否为字母
            //遇到非字母跳过
            while(begin<end && !isLetter(s[begin]))
            {
                ++begin;
            }
            while(begin<end && !isLetter(s[end]))
            {
                --end;
            }
            //进行字母间的交换
            swap(s[begin],s[end]);
            ++begin;
            --end;
       }
        return s;
    }
};

387.字符串中的第一个唯一字符

题目链接:387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

题目描述:

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

示例:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

思路:

        使用一个大小为26个int的数组countA(因为只有26个字母)统计字符串 s 中每个字母出现的次数,然后再遍历一次字符串,找到第一个唯一字符(字符串中只有这一个只出现一次,并且它是第一个,即使后面有唯一字符,也是返回第一个出现的字符),返回它在该字符串 s 中的索引,若找不到则返回-1。

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

class Solution {
public:
    int firstUniqChar(string s) {
    //计算这个字符串某个字符出现次数的数组
    int countA[26] = {0};
    //范围for统计出字符串中每个元素出现的次数
    for(auto ch : s)
    {
        countA[ch - 'a']++;//映射其在字母表中的位置
    }
    for(int i =0;i<s.size();i++)
    {
        if(countA[s[i] - 'a'] == 1)//找到s中第一次出现的字母
        {
            return i;//返回其索引
        }
    }
    return -1;//找不到
    }
};

HJ1 字符串最后一个单词的长度

题目链接:字符串最后一个单词的长度_牛客题霸_牛客网 (nowcoder.com)

题目描述:

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

示例:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

图解:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

#include <iostream>
using namespace std;
#include<string>
int main()
{
    string str;
    getline(cin,str);//不要使用cin>>line,因为会它遇到空格就结束了
    size_t i =str.rfind(' ');//找到此字符串的最后一个空格的位置
    if(i != string::npos)//等于则表示“未找到”或者“超出范围”
    {
        cout<<str.size() - (i+1)<<endl;
    }
    else//字符串没有空格,则计算整个字符串的大小
    {
        cout<<str.size()<<endl;
    }
}

125.验证回文串

题目链接:125. 验证回文串 - 力扣(LeetCode)

题目描述:

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

题目示例:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

解题思路:

        先写一个判断是否为字母和数字的函数,然后写一个判断回文数的函数,先用范围for遍历这个字符串,将所有小写字母变成大写字母(为什么不用大写转小写呢?)看下面解释:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

将所有小写字母转换成大写后,此时定义begin指向字符串的开头,end则指向字符串结尾('\0'的前一个位置),循环条件是begin < end,此时遍历字符串,begin向右移动,end向左移动,如果遇到 空格,以及其他非数字非字母的字符则直接跳过。

        之后,如果两指针此时指向的字符不一样(因为前面已经小写转大写)则直接返回false,如果相同依旧是begin++,end--,当遍历完字符串时,则说明此字符串为回文字符串,返回true。

代码:

class Solution {
public:
    //判断是否是字母,数字,是返回true,否则为false
    bool isLetterOrNumber(char ch)
    {
        return (ch>='0' && ch<='9')
        || (ch>='a' && ch<='z')
        || (ch>='A' && ch<='Z');
    }
    //确保在后续比较时,无论是大写还是小写字母,都被视为相同的字符
    //这样做的好处在于,当判断字符串是否为回文串时,我们不需要区分大小写
    //在忽略空格并统一字母大小写后,其回文性更容易判断
    bool isPalindrome(string s)//判断是否是回文数
    {
       for(auto&ch :s){
          if(ch>='a' && ch<= 'z')
          {
               ch -= 32;
          }
        }
    int begin = 0, end = s.size()-1;
    while(begin<end)
    {
        //遇到非字母和数字则跳过
        while(begin < end && !isLetterOrNumber(s[begin]))
        {
            ++begin;
        }
        while(begin < end && !isLetterOrNumber(s[end]))
        {
            --end;
        }
        if(s[begin] != s[end])
        {
            return false;
        }
        else
        {
            ++begin;
            --end;
        } 
    }
         return true;
    } 
  
};

415.字符串相加

题目链接:415. 字符串相加 - 力扣(LeetCode)

题目描述:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

题目示例:

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,C++,c++,算法,leetcode,容器,stl,c语言

代码: 

class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1=num1.size()-1,end2=num2.size()-1;
        string str;
        //进位
        int next= 0;
        while(end1>= 0 || end2>=0)
        {
            int x1 = end1 >=0 ? num1[end1]-'0' : 0;
            int x2 = end2 >=0 ? num2[end2] -'0': 0;

            int ret = x1 + x2 +next;
            //进位
            next = ret/10;
            ret= ret%10;
            //头插
            str.insert(0,1,'0'+ret);
            --end1;
            --end2;
        }
           
         if(next ==1)
          str.insert(0,1,'1');
        
        return str;
    }
};

本篇完。

🔧本文修改次数:0

🧭更新时间:2024年4月7日 文章来源地址https://www.toymoban.com/news/detail-845308.html

到了这里,关于【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录复习 151反转字符串中的单词242 有效的字母异位词 0-1背包问题

    代码如下  func reverseWords(s string) string {          b := []byte(s)             slowindex,fastindex := 0,0  //设置两个指着,快慢指针          for len(b)  0  fastindex  len(b)  b[fastindex] == \\\' \\\'{              fastindex++    //这里是取出开头的空格,逻辑是如果当

    2024年02月04日
    浏览(30)
  • 【C++初阶】九、STL容器中的string类(上)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】八、初识模板(泛型编程、函数模板、类模板)-CSDN博客  ==============================

    2024年02月04日
    浏览(39)
  • 每日OJ题_算法_滑动窗口⑥_力扣438. 找到字符串中所有字母异位词

    目录 力扣438. 找到字符串中所有字母异位词 解析及代码1 解析及代码2 438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 难度 中等 给定两个字符串  s  和  p ,找到  s   中所有  p   的  异位词  的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词  指由

    2024年01月24日
    浏览(34)
  • C++:模板初阶以及string类使用

    1.泛型编程 泛型编程: 编写与类型无关的通用代码 ,是代码复用的一种手段。 模板是泛型编程的基础。 实现加法: 两个函数只有类型上的不同,逻辑完全一致,能不能 写一份表示逻辑的模板,让编译器帮我们生成函数呢? 2.函数模板 模板的原理图 函数模板格式 templatet

    2024年02月13日
    浏览(29)
  • C++初阶之一篇文章让你掌握string类(了解和使用)

    学习 string 类是在 C++ 中非常重要的一步,string 类是 C++ 标准库提供的用于处理字符串的类,它相比 C 语言中的字符串处理函数更为高级、灵活和安全。以下是学习 string 类的一些重要理由: 功能强大 :string 类提供了丰富的成员函数和操作符,用于处理字符串的拼接、查找、

    2024年02月15日
    浏览(24)
  • 【C++】---string的OJ题

    解题思路: 根据题意,有以下四种字符需要考虑: 首部空格: 删除之即可; 符号位: 三种情况,即 ‘’+‘’ , ‘‘−’’ , \\\'\\\'无符号\\\" ;新建一个变量(sign)保存符号位,返回前判断正负即可; 非数字字符: 遇到首个非数字的字符时,应立即返回; 数字字符: 字符转数字

    2024年04月13日
    浏览(55)
  • 【C++初阶】8. STL初阶 + String类

    STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗 数据结构与算法的软件框架 。 原始版本 Alexander Stepanov、Meng Lee 在 惠普实验室 完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播

    2023年04月08日
    浏览(31)
  • 【LeetCode】【C++】string OJ必刷题

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 【LeetCode】415.字符串相加 【LeetCode】43.字符串相乘   【LeetCode】125.验证回文字符串 【

    2024年02月05日
    浏览(25)
  • 151. 反转字符串中的单词

    题目链接:151. 反转字符串中的单词 代码如下:

    2024年01月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包