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