2000.反转单词前缀

难度:简单

目录

一、问题描述

二、思路

1、解题思路

①.方法一

②.方法二

2、极端情况判断

3、解决极端情况

三、解题

1、代码实现

①.方法一

②.方法二

 2、时间复杂度 and 空间复杂度

①.方法一

②.方法二

四、总结


一、问题描述

这里直接采用的是LeetCode上面的问题描述。

        给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。

  • 例如,如果 word = "abcdefd" ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd"

返回 结果字符串

下面给出示例:

提示:

  • 1 <= word.length <= 250
  • word 由小写英文字母组成
  • ch 是一个小写英文字母

二、思路

1、解题思路

①.方法一

首先想到的就是直接使用 C++字符串内置函数:

  • string.find_first_of( char )
  • reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)

能够直接完成从下标 0 到 第一次出现的  ch 下标进行 反转

②.方法二

        可以使用数据结构 找到首个 ch 字母的下标,将 word 中 从下标 0 到 首个 ch 字母下标的字符全部入栈。

        然后依次出栈 将word 0 到首个 ch 字母下标 覆盖即可。

2、极端情况判断

  1. 这里方法一不需要进行极端情况判断,方法二要判断 在字符串 word 中是否有 字符 ch ,不判断的话后面没找到 ch 会下标越界。

3、解决极端情况

  1. 对字符串 word 中是否有字符 ch 进行判断,没有则直接返回 word

三、解题

1、代码实现

①.方法一

class Solution {
public:
    string reversePrefix(string word, char ch) {
        string ans ;
        reverse(word.begin(), word.begin()+index+1);
        return word;
    }
};

②.方法二

class Solution {
public:
    string reversePrefix(string word, char ch) {
        string ans ;
        int index = word.find_first_of(ch);
        if(index > word.size()){
            return word;
        }
        stack<int> p;
        for(int i = 0; i <= index; i++){
            p.push(word[i]);
        }
        for(int i = 0; i <= index; i++){
            word[i] =  p.top();
            p.pop();
        }
        return word;
    }
};

 2、时间复杂度 and 空间复杂度

①.方法一

时间复杂度:O(n),n 为字符串的长度

空间复杂度:O(n)

②.方法二

时间复杂度:O(n),n为字符串的长度

空间复杂度:O(n)

四、总结

        这题没有什么难度,考察 C++ string 的库函数,我们需要熟练掌握 库函数 对于一些题目会很简单。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Alkaid_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值