C ++中字符串的反向元音
给定一个字符串,任务是反转给定字符串中存在的所有元音。例如,
输入1-
a = “tutor”
输出-
totur
说明-反转字符串“tutor”将生成输出为“totur”。
输入-2-
a = “mathematics”
输出-
mithametacs
说明-反转字符串“mathematics”将生成输出为“mithametacs”。
解决这个问题的方法
给定一个字符串,我们必须反转其中的所有元音。有几种方法可以解决此特定问题,但我们必须在线性时间内解决此问题O(n)。
因此,解决此问题的更好方法是使用双向指针方法,在这种方法中,我们将使用两个指针低和指针高,它们最初将指向最左边的元素和最右边的元素。在两个嵌套循环中,我们将检查最左边的字符是否是元音,最右边的字符是否是元音,然后交换元素并移动右指针。
输入一个字符串。
一个布尔函数,用于检查字符是否为元音。
函数reverseVowel(string&str)将字符串作为输入,并反转字符串中存在的元音。
初始化低和高两个指针,分别指向“0”和最后一个字符。
检查最左边和最右边的字符是否是元音,然后就地交换字符并减少最右边的指针。
重复这些步骤,直到未访问字符串的所有字符。
示例
#include <bits/stdc++.h>
using namespace std;
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';
}
string reverseVowel(string &s){
int low = 0;
int high = s.size() - 1;
while (low < high) {
while (low < high && !isVowel(s[low])) {
low ++;
}
while (low < high && !isVowel(s[high])) {
high --;
}
swap(s[low++], s[high--]);
}
return s;
}
int main(){
string a= "nhooo";
string ans= reverseVowel(a);
cout<<ans;
return 0;
}输出结果运行上面的代码将生成如下输出:
titorailspount
由于给定的字符串“nhooo”包含元音,因此在反转元音后,它将生成输出为“titorailspount”。