栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java&C++题解与拓展——leetcode824.山羊拉丁文【么的新知识】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java&C++题解与拓展——leetcode824.山羊拉丁文【么的新知识】

每日一题做题记录,参考官方和三叶的题解

文章目录
  • 题目要求
  • 思路:模拟
    • Java
    • C++
      • 字符串构造
  • 总结

题目要求

思路:模拟

简单、立即推、模拟……

就是找到每一个单词,然后根据是否是元音开头判断要不要改变一下顺序,之后添加末尾的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();
    }
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)
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;
    }
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)
字符串构造

上面构造字符串a时是每次拼接,也可以换用字符串构造函数string(cnt, 'a'),cnt为本次需添加几个 a a a,初值为1。
那两句加尾巴就可以变成:

res += "ma" + string(cnt++, 'a');
总结

模拟模拟,理清思路直接写就完了。

官方题解里说时间复杂度是 O ( n 2 ) O(n^2) O(n2)就很迷惑,不就只遍历了一圈……但他的意思是返回的字符串数量级是 O ( n 2 ) O(n^2) O(n2)的,因为带了一堆小尾巴……这个复杂度是要看返回值的么???不是单纯计算???

还要好好xiao一下时间复杂度计算相关的内容啊……


欢迎指正与讨论!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号