本文已参与「新人创作礼」活动,一起开启掘金创作之路。
| 每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:模拟
简单、立即推、模拟……
就是找到每一个单词,然后根据是否是元音开头判断要不要改变一下顺序,之后添加末尾的maaaa……
Java
class Solution {
public String toGoatLatin(String sentence) {
int n = sentence.length();
String a = "a";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; ) {
int j = i;
while(j < n && sentence.charAt(j) != ' ') // 定位当前完整单词
j++;
if("aeiouAEIOU".indexOf(sentence.charAt(i)) >= 0) // 元音开头
sb.append(sentence.substring(i, j));
else
sb.append(sentence.substring(i + 1, j)).append(sentence.charAt(i));
sb.append("ma").append(a); // 添加尾巴
a += "a";
i = j + 1;
if(i < n)
sb.append(" ");
}
return sb.toString();
}
}
- 时间复杂度:
- 空间复杂度:
C++
class Solution {
public:
string toGoatLatin(string sentence) {
int n = sentence.length();
string vowel = "aeiouAEIOU";
string a = "a";
string res = "";
for(int i = 0; i < n; ) {
int j = i;
while(j < n && sentence[j] != ' ') // 定位当前完整单词
j++;
if(vowel.find(sentence[i]) != string::npos) // 元音开头
res += sentence.substr(i, j - i);
else
res += sentence.substr(i + 1, j - i - 1) + sentence[i];
res += "ma" + a; // 添加尾巴
a += "a";
i = j + 1;
if(i < n)
res += " ";
}
return res;
}
};
- 时间复杂度:
- 空间复杂度:
字符串构造
上面构造字符串a时是每次拼接,也可以换用字符串构造函数string(cnt, 'a'),cnt为本次需添加几个,初值为1。
那两句加尾巴就可以变成:
res += "ma" + string(cnt++, 'a');
总结
模拟模拟,理清思路直接写就完了。
官方题解里说时间复杂度是就很迷惑,不就只遍历了一圈……但他的意思是返回的字符串数量级是的,因为带了一堆小尾巴……这个复杂度是要看返回值的么???不是单纯计算???
还要好好xiao一下时间复杂度计算相关的内容啊……
| 欢迎指正与讨论! |