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”。