反转字符串
题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
题解如下:
class Solution {
public:
void reverseString(vector<char>& s) {
int n=s.size();
for(int i = 0; i < n/2; i++)
{
swap(s[i],s[n - 1 - i]);
}
}
};
反转字符串中的元音字母
题目描述:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: “hello”
输出: “holle”
题解如下:
class Solution {
bool isVowel(char ch){
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'
||ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
public:
string reverseVowels(string s) {
int begin = 0;
int end = s.size() - 1;
while(begin < end){
while(begin != end){
if(isVowel(s[begin]))
break;
++begin;
}
while(begin != end){
if(isVowel(s[end]))
break;
--end;
}
if(begin < end){
swap(s[begin], s[end]);
++begin;
--end;
}
}
return s;
}
};
反转字符串 II
题目描述:
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
要求:
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
题解如下:
class Solution {
void reverse(string& s, int begin, int end) {
while(begin < end){
swap(s[begin++], s[end--]);
}
}
public:
string reverseStr(string& s, int k) {
int n = s.size();
int start = 0;
while (n >= 2 * k) {
reverse(s, start, start + k - 1);
start += 2 * k;
n -= 2 * k;
}
if (n >= k&& n < 2 * k) {
reverse(s, start, start + k - 1);
}
else if (n < k) {
reverse(s, start, start + n - 1);
}
return s;
}
};
反转字符串中的单词 III
题目描述:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
题解如下:
class Solution {
void reverse(string& s, int begin, int end) {
while (begin < end) {
swap(s[begin++], s[end--]);
}
}
public:
string reverseWords(string s) {
int len = s.size();
int start = 0;
int end = 0;
do
{
end = s.find(' ', end+1);
if (end > 0) {
reverse(s, start, end - 1);
start = end + 1;
}
else {
reverse(s, start, len - 1);
break;
}
} while (start < len);
return s;
}
};