string OJ题

目录

1.仅仅反转字母

2.字符串中的第一个唯一字符​编辑

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

4.替换空格


1.仅仅反转字母

我们可以定义两个变量来表示数组首尾位置的有效字符的下标,然后分别从前和从后向中间遍历,只要遇到字母就停下来,利用库函数swap进行交换。

class Solution {
    //先写一个判断是字母的函数
  bool panduan(char ch)
  {
      if(ch>='a'&&ch<='z')
      return true;
      if(ch>='A'&&ch<='Z')
      return true;

      return false;
  }

public:
    string reverseOnlyLetters(string s) {
      
      size_t begin=0, end =s.size()-1;
      //这里是数组下标,所以要-1
      while(begin<end)
      {
          //如果是字母就停下来交换,不是就一直往后走找字母,
          while(begin<end && !panduan(s[begin]))
          begin++;
          while(begin<end && !panduan(s[end]))
          end--;

        swap(s[begin++],s[end--]);
      }
return s;
    }
};

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

这个题就是找没有出现过字符的下标

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;
    }
};

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

#include <iostream>
#include <string>
using namespace std;

int main() {
     string str;

     getline(cin,str);//提取的时候不会被空格影响,只会被\0影响

     size_t pos =str.rfind(' ');
     if(pos!=string::npos) //pos返回失败是npos
     {
        cout<<str.size()-pos-1<<endl;
        //左闭右开求的就是实际长度,因为有空格要把空格删掉
     }
     else {  //没有空格的情况,直接返回size
     cout<<str.size()<<endl;
     }


    }

这道题可以利用getline(不会被空格影响)来获取一行的字符串,然后通过rfind函数找到最后一个单词前面空格的位置,最后用size的大小(实际是最后一个的下一个位置)减去空格位置的下标,再减1,因为两个下标做差求的是区间的个数,要求区间中字符的个数需要多减去1.

4.替换空格

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值