345文字列の母音文字を反転
14580 ワード
タイトルの説明:文字列を入力として関数を作成し、その文字列のアクセント文字を反転します.例1:入力:hello出力:holle例2:入力:leetcode出力:leotcede説明:母音文字にyを含まない.
方法1:主な考え方:(1)両ポインタを用いて両端から中間に遍歴し、判断する.(2)前後の2つのポインタが指す要素がいずれも母音アルファベットであれば交換する.(3)前ポインタが母音アルファベットでなければ、後ろに自増し、後ポインタが母音アルファベットでなければ、前に自減する.
方法2:主な考え方:(1)ここでは方法1の考え方と同様に、母音アルファベットであるか否かを判断する関数を配列に変換して判断をマッピングし、速度を上げる
方法1:主な考え方:(1)両ポインタを用いて両端から中間に遍歴し、判断する.(2)前後の2つのポインタが指す要素がいずれも母音アルファベットであれば交換する.(3)前ポインタが母音アルファベットでなければ、後ろに自増し、後ポインタが母音アルファベットでなければ、前に自減する.
class Solution {
public:
//
bool isValue(char ch){
if(ch=='a'||ch=='A'||ch=='e'||ch=='E'||ch=='i'||ch=='I'||ch=='o'||ch=='O'||ch=='u'||ch=='U')
return true;
return false;
}
string reverseVowels(string s) {
if(s.size()<2)
return s;
//
int front=0;
int back=s.size()-1;
while(front<back){
// ,
if(isValue(s[front])&&isValue(s[back])){
char ch=s[front];
s[front++]=s[back];
s[back--]=ch;
}
// ,
while(front<back&&!isValue(s[front])){
++front;
}
// ,
while(front<back&&!isValue(s[back])){
--back;
}
}
return s;
}
};
方法2:主な考え方:(1)ここでは方法1の考え方と同様に、母音アルファベットであるか否かを判断する関数を配列に変換して判断をマッピングし、速度を上げる
class Solution {
public:
string reverseVowels(string s) {
if(s.size()<2)
return s;
int front=0;
int back=s.size()-1;
int isValue[256]={0};
isValue['a']=1;
isValue['A']=1;
isValue['e']=1;
isValue['E']=1;
isValue['i']=1;
isValue['I']=1;
isValue['o']=1;
isValue['O']=1;
isValue['u']=1;
isValue['U']=1;
while(front<back){
if(isValue[s[front]]&&isValue[s[back]]){
char ch=s[front];
s[front++]=s[back];
s[back--]=ch;
}
while(front<back&&!isValue[s[front]]){
++front;
}
while(front<back&&!isValue[s[back]]){
--back;
}
}
return s;
}
};