C++ 字符串中反转元音


给定一个字符串,任务是反转给定字符串中存在的所有元音。例如,

输入-1

a = “tutor”

输出

totur

解释 − 反转字符串“tutor”将生成输出“totur”。

输入-2

a = “mathematics”

输出

mithametacs

解释 − 反转字符串“mathematics”将生成输出“mithametacs”。

解决此问题的方法

给定一个字符串,我们必须反转其中存在的所有元音。解决此特定问题有几种方法,但我们必须在线性时间 O(n) 内解决此问题。

因此,解决此问题的更好方法是使用双指针方法,在该方法中,我们将采用两个指针 low 和 high,它们最初将分别指向最左边的元素和最右边的元素。在两个嵌套循环中,我们将检查最左边的字符是否为元音,最右边的字符是否也为元音,然后交换元素并移动右指针。

  • 输入一个字符串。

  • 一个布尔函数来检查字符是否为元音。

  • 一个函数 reverseVowel(string &str) 以字符串作为输入并反转字符串中存在的元音。

  • 初始化两个指针 low 和 high,分别指向“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= "tutorialspoint";
   string ans= reverseVowel(a);
   cout<<ans;
   return 0;
}

输出

运行以上代码将生成如下输出:

titorailspount

由于给定的字符串“tutorialspoint”包含元音,因此在反转元音后,它将生成输出“titorailspount”。

更新于: 2021年2月5日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.