824. Goat Latin的C++算法

算法打败了100%的用户。

1.用unordered_set判断单词开头是不是元音。

2.一边找完整的单词,一边对单词里的字母进行换位置操作。时间复杂度只需要线性。

3.把末尾要添加的字母直接做成一个字符串,每次循环改一下即可。

4.要注意i的下标,S增加了词末字符串之后i的下标所指的位置会改变。

class Solution {
public:
	string toGoatLatin(string S) {
		unordered_set<char> vowel = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };
		int i = 0;
		string sub;
		sub= "maa";
		while (i < S.length())
		{
			int j = i + 1;
			int isvowel = vowel.count(S[i]);
			char tmp = S[i];
			while ((S[j] != ' ') && (j<S.length()))
			{
				if (!isvowel) S[j - 1] = S[j];
				j++;
			}
			if (!isvowel) S[j - 1] = tmp;
			S.insert(j, sub);
			i = j + sub.length()+1;
			sub = sub + 'a';
			
		}
		return S;
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值