该方法旨在用字母表中最接近的元音(也称为小写拉丁字母)替换一串辅音。如果两个元音同样接近,我们可以用这些字母中的第一个元音来替换它们。
让我们来看一些输入场景 -
假设我们有一个字符串,比如“ebgkjasjd”,现在我们需要将字符串中所有出现的辅音字母替换为最近的元音字母。
Input = "ebgkjasjd"; Result = ebgkjasjd eaeiiauie
将元素'b'替换为'a',因为它是最近的元音字母。我们可以用'e'或'i'替换元素'g',因为它们都是同样最近的,但我们选择用'e'替换它,因为它先出现。对于字符串中的所有其他元素也是类似的。
假设如果输入字符串不存在任何元音,例如,考虑一个字符串:“sdfhgtykl”,则得到的结果输出为 -
Input = "sdfhgtykl"; Result = sdfhgtykl ueeieuuii
对于第一个元素's',元音'u'是最接近的,因此将's'替换为'u'。与数组中的所有其他元素一样,它们都是辅音。这种情况也产生了该方法的最坏情况复杂度。
从起始索引开始遍历输入字符串。
如果遇到一个辅音,将计算从该辅音到左右最近的两个元音之间的字母数量。选择具有较少字母的元音。
该过程将重复进行,直到遍历完字符串中的所有辅音字母。
获得的输出是替换后的字符串。
以下是用C++实现的代码,将字符串中的所有辅音字母替换为字母表中最近的元音字母 -
#include <iostream> using namespace std; void solve(string& s) { for(char &ch : s) { if(ch>'a' && ch<'e') { if(ch-'a' <= 'e'-ch) ch='a'; else ch='e'; } else if(ch>'e' && ch<'i') { if(ch-'e' <= 'i'-ch) ch='e'; else ch='i'; } else if(ch>'i' && ch<'o') { if(ch-'i' <= 'o'-ch) ch='i'; else ch='o'; } else if(ch>'o' && ch<'u') { if(ch-'o' <= 'u'-ch) ch='o'; else ch='u'; } else if(ch>'u') { ch = 'u'; } } } int main() { string s = "ibgshzjbsh"; cout << s << "\n"; solve(s); cout << s; return 0; }
“ibgshzjbsh” “iaeuiuiaui”
但是,更好的方法是使用数组并存储每个字符最接近的字符答案,而不是使用大量 if-else 条件。
#include <iostream> #include <vector> using namespace std; string solve(string s) { string hash = "aaaeeeeiiiiioooooouuuuuuuu"; for (int i=0;i<s.size();i++) { s[i] = hash[s[i]-'a']; } return s; } int main() { string s = "ibgshzjbsh"; cout << solve(s); return 0; }
iaeuiuiaui
我们可以通过查找元素并将其替换为最接近的字符来替换元素。遍历一次字符串的时间复杂度为 O(n)。第二种方法更容易理解和编写代码,并且不那么麻烦。时间复杂度也是 O(n),因为我们只遍历字符串一次。
以上是使用C++程序将字符串中的所有辅音替换为最近的元音的详细内容。更多信息请关注PHP中文网其他相关文章!