难度:简单
目录
一、问题描述
这里直接采用的是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、极端情况判断
- 这里方法一不需要进行极端情况判断,方法二要判断 在字符串 word 中是否有 字符 ch ,不判断的话后面没找到 ch 会下标越界。
3、解决极端情况
- 对字符串 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 空间复杂度
①.方法一
时间复杂度:,n 为字符串的长度
空间复杂度:
②.方法二
时间复杂度:,n为字符串的长度
空间复杂度:
四、总结
这题没有什么难度,考察 C++ string 的库函数,我们需要熟练掌握 库函数 对于一些题目会很简单。