前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【OJ】string类题目

【OJ】string类题目

作者头像
zxctscl
发布2024-03-17 08:44:00
发布2024-03-17 08:44:00
9200
代码可运行
举报
文章被收录于专栏:zxctscl个人专栏zxctscl个人专栏
运行总次数:0
代码可运行

1. 415字符串相加

1.1 分析

要实现字符串的相加,先得定位到两个字符串的最后一个字符:

代码语言:javascript
代码运行次数:0
复制
int end1=num1.size()-1;
int end2=num2.size()-1;

如果最后一个字符相加大于10,就得进位

再定义一个变量用来记录进位int next=0;。重新定义一个string的字符串用来记录相加结果string retstr。 当两个字符相加,得注意,要转换为整形相加,当ret大于10,那么next=ret/10,而字符穿要记录的是ret=ret%10,再头插retstr.insert(0,1,ret+'0'),头插时要转换为字符头插。 如果9+1,那么返回结果就是0,所以不能忘记少插入进位值,在最后判断一下,再进行头插:

代码语言:javascript
代码运行次数:0
复制
if(next==1)
   retstr.insert(retstr.begin(),'1');

1.2 代码

代码语言:javascript
代码运行次数:0
复制
class Solution {
public:
    string addStrings(string num1, string num2) {
     int next=0;
     string retstr;
     int end1=num1.size()-1;
     int end2=num2.size()-1;
     while(end1>=0||end2>=0)
     {
        int val1=end1>=0?num1[end1--]-'0':0;
        int val2=end2>=0?num2[end2--]-'0':0;
        int ret=val1+val2+next;
        next=ret/10;
        ret=ret%10;
        retstr.insert(0,1,ret+'0');
     }
     if(next==1)
        retstr.insert(retstr.begin(),'1');
     return retstr;
}
    
};

2. 344反转字符串

2.1 分析

这里题目要求在原地修改,直接用swap进行交换就可以。如果size是偶数那么刚好全部都交换了,如果是奇数,那么除了区间之间的都要交换。 直接用两个变量,一个从前面开始走int l = 0,一个从后面走int r = n - 1,循环结束条件就是:当l等于r就结束,奇数中间的就不会换,偶数也刚好交换完。

代码语言:javascript
代码运行次数:0
复制
        while(l< r)
        {
            swap(s[l], s[r]);
            l++; 
            r--;
        }  

2.2 代码

代码语言:javascript
代码运行次数:0
复制
class Solution {
public:
    void reverseString(vector<char>& s) {
       int n=s.size();
       int l = 0;
       int r = n - 1;
        while(l< r)
        {
            swap(s[l], s[r]);
            l++; 
            r--;
        }  
    }
};

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

3.1 分析

这里用getline得到输入的一行单词,要获取最后一个单词的长度,那么就得先找到最后一个单词。 在string中有一个rfind是从后往前找,只需要找到第一个空格位置,在这个位置后面一个位置,那就是最后一个单词开始位置,记录下这个位置size_t pos=str.rfind(' ');。 然后用size减去这个位置加1就是最后一个单词的长度str.size()-(pos+1)

3.2 代码

代码语言:javascript
代码运行次数:0
复制
#include <iostream>
using namespace std;

int main() {
    string str;

    getline(cin,str);
    size_t pos=str.rfind(' ');
    cout<<str.size()-(pos+1)<<endl;

}
// 64 位输出请用 printf("%lld")

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

4.1 分析

开一个计数数组,题目只包含小写字母,所以开26个就可以了int count[26]={0};,做一个相对映射,每一个减97。遍历字符串记录出现次数。

代码语言:javascript
代码运行次数:0
复制
for(auto ch:s)
 {
  count[ch-'a']++;
 }

可能会出现出现一次的有多个,要找第一个,就得从前往后遍历一下。 第一个出现次数为1的就返回它的下标,没有就返回-1。

代码语言:javascript
代码运行次数:0
复制
for(int i=0;i<s.size();i++)
     {
        if(count[s[i]-'a']==1)
            return i;
     }
     return -1;

4.2 代码

代码语言:javascript
代码运行次数:0
复制
class Solution {
public:
    int firstUniqChar(string s) {
     int count[26]={0};
     for(auto ch:s)
     {
        count[ch-'a']++;
     }
     for(int i=0;i<s.size();i++)
     {
        if(count[s[i]-'a']==1)
            return i;
     }
     return -1;
    }
};

5. 125验证回文串

5.1 分析

这里可能会出现大写和数字,故重新定义一个字符串,用来保存将原字符串中将大写变为小写的新字符串。 介绍要用到的函数isalnum(char c) 是否为字母或者数字;islower(char c) 是否为小写字母 遍历s查找里面的字符,不管是不是小写,一律都转化成小写。

代码语言:javascript
代码运行次数:0
复制
 string s1;
  for (char ch: s) {
       if (isalnum(ch)) {
       s1+=tolower(ch);
        }
   }

将转为小写的s1先用s2记录一份,再用reverse()逆置,reverse(s2.begin(),s2.end());。 再将逆置后的s2与s1进行compare,如果结果为0就为真。反之则为false。

5.2 代码

代码语言:javascript
代码运行次数:0
复制
class Solution {
public:
    bool isPalindrome(string s) {
        string s1;
        for (char ch: s) {
            if (isalnum(ch)) {
                s1+=tolower(ch);
            }
        }
        string s2=s1;
        reverse(s2.begin(),s2.end());

      if(s1.compare(s2)==0)
      {
        return true;
      }
       return false;

    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 415字符串相加
    • 1.1 分析
    • 1.2 代码
  • 2. 344反转字符串
    • 2.1 分析
    • 2.2 代码
  • 3. HJ1字符串最后一个单词的长度
    • 3.1 分析
    • 3.2 代码
  • 4. 387.字符串中的第一个唯一字符
    • 4.1 分析
    • 4.2 代码
  • 5. 125验证回文串
    • 5.1 分析
    • 5.2 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档