C++で文字列内の母音を反転する方法|双方向ポインタ法によるO(n)実装
文字列が与えられたとき、その中に含まれるすべての母音を反転させることが今回の課題です。まずは具体例から見ていきましょう。
入力例1 −
a = "tutor"
出力 −
totur
解説 − 文字列「tutor」の母音(u と o)を反転すると、「totur」という出力が得られます。
入力例2 −
a = "mathematics"
出力 −
mithametacs
解説 − 文字列「mathematics」の母音を反転すると、「mithametacs」という出力が得られます。
この問題を解くためのアプローチ
文字列が与えられたら、その中に含まれるすべての母音を反転させる必要があります。この問題には複数の解法がありますが、ここでは線形時間 O(n) で解くことを目標とします。
最も効率的なのが双方向ポインタ(Two-Pointer)アプローチです。low と high の2つのポインタを用意し、それぞれ文字列の左端と右端の要素を指すように初期化します。その後、左端の文字が母音であり、かつ右端の文字も母音である場合に要素を入れ替え、ポインタを互いに内側へ進めていきます。
文字列を入力として受け取ります。
文字が母音かどうかを判定するブール関数を用意します。
reverseVowel(string &str) 関数は文字列を受け取り、その中の母音を反転させます。
2つのポインタ low と high を初期化し、それぞれ先頭(0番目)と末尾の文字を指すようにします。
左端と右端の文字がどちらも母音であれば、その場で文字を入れ替え、右側のポインタを1つ減らします。
文字列のすべての文字を走査し終えるまで、この手順を繰り返します。
実装例
#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」という結果が出力されます。
-
C#で文字列を反転する方法(Array.Reverseの使い方)
C#で文字列を反転する方法 C#で文字列を逆順に並べ替えたい場合は、Array.Reverse()メソッドを使うのが最も簡単です。文字列はそのままでは直接反転できないため、一度文字配列(char配列)に変換してから反転処理を行います。 文字列を反転するサンプルコード 以下は、文字列を反転して返すカスタムメソッドの例です。ここでは、引数として渡された文字列「Henry」を反転させています。 public static string ReverseFunc(string str) { char[] ch = str.ToCharArray(); Array.Reverse(ch)
-
Pythonで文字列内の母音を逆順に入れ替える方法
文字列内の母音を反転するとは小文字のみで構成された文字列が与えられたとき、その中に含まれる母音(a・e・i・o・u)だけを逆順に入れ替える問題を考えてみましょう。たとえば、文字列が「hello」の場合、母音は「e」と「o」なので、これらを反転すると結果は「holle」になります。同様に、「programming」の場合は「prigrammong」が出力されます。解決のための手順この問題は、次の手順に沿って解くことができます。文字列を走査し、母音の一覧を作成すると同時に、その出現位置(インデックス)も記録します収集した母音のリストを逆順に並べ替えますカウンター idx を 0 で初期化しますi