给定一个字符串,任务是反转给定字符串中存在的所有元音。例如,
输入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”。