557. 反转字符串中的单词 III
题目
给定一个字符串 s
,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
提示:
1 <= s.length <= 5 * 104
s
包含可打印的 ASCII 字符。s
不包含任何开头或结尾空格。s
里 至少 有一个词。s
中的所有单词都用一个空格隔开。
示例
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "Mr Ding"
输出:"rM gniD"
题解
就是上面两道题的结合
class Solution {
public:
string reverseWords(string s) {
s += ' ';
vector<string> res;
string temp;
for(char ch : s){
if(ch == ' '){
if(!temp.empty()){
res.push_back(temp);
temp.clear();
}
}else{
temp +=ch;
}
}
string result;
for(auto& str : res){
reverse(str.begin(),str.end());
result += str;
result += ' ';
}
result.pop_back(); // Remove the trailing space
return result;
}
};
C++相关语法: for
循环
在 C++ 中,for (const auto& str : res)
这行代码中的 const
、auto
和 &
各自有不同的含义:
-
const
:const
关键字用于声明一个常量,意味着你不能修改它所修饰的变量的值。- 在这个循环中,
const
修饰的是auto&
声明的引用,表示str
是一个常量引用。这意味着在循环体内,你不能通过str
来修改res
中的字符串。
-
auto
:auto
是一个类型推断关键字,它让编译器自动推断变量的类型。在这段代码中,auto
用于声明变量str
,编译器会根据res
中元素的实际类型来确定str
的类型。
-
&
:&
是一个引用符号,用于创建一个引用,而不是变量的一个副本。在这里,auto& str
声明了一个对res
中每个元素的引用。
结合在一起,const auto& str
的含义是:声明了一个类型由编译器自动推断的常量引用 str
。在循环中,每次迭代 str
都会绑定到 res
容器中的一个元素上,但因为 str
是一个常量引用,所以你不能通过 str
来修改 res
中的元素。
使用 const auto&
的好处包括:
- 避免不必要的复制:由于
str
是一个引用,所以在循环中不需要复制res
中的元素,这可以提高效率。 - 保护数据:由于
str
是一个常量引用,它提供了一种保护机制,防止在循环体内无意中修改res
中的元素。