Java&C++题解与拓展——leetcode804.唯一摩尔斯密码词【string类复习与使用】

127 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

题目要求

image.png

思路:

按要求模拟就完了,利用哈希表不能存相同值特性,然后通过UnicodeUnicode计算是已知摩斯密码对应表dirdir的第几个。

Java

class Solution {
    String[] dir = new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    public int uniqueMorseRepresentations(String[] words) {
        Set<String> res = new HashSet<>();
        for(String w : words) {
            StringBuilder sb = new StringBuilder();
            for(char c : w.toCharArray())
                sb.append(dir[c - 'a']); //unicode计算是dir的第几个
            res.add(sb.toString());
        }
        return res.size();
    }
}
  • 时间复杂度:O(i=0words.length1words[i].length)O(\sum_{i=0}^{words.length-1}words[i].length),即所有单词长度之和
  • 空间复杂度:O(i=0words.length1words[i].length)O(\sum_{i=0}^{words.length-1}words[i].length)

C++

const static string dir[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.","....", "..", ".---", "-.-", ".-..", "--", "-.","---", ".--.", "--.-", ".-.", "...", "-", "..-","...-", ".--", "-..-", "-.--", "--.."};

class Solution {
public:
    int uniqueMorseRepresentations(vector<string>& words) {
        unordered_set<string> res;
        for(auto &w : words) {
            string str;
            for(auto &c : w)
                str.append(dir[c - 'a']);
            res.emplace(str);
        }
        return res.size();
    }
};
  • 时间复杂度:O(i=0words.length1words[i].length)O(\sum_{i=0}^{words.length-1}words[i].length),即所有单词长度之和
  • 空间复杂度:O(i=0words.length1words[i].length)O(\sum_{i=0}^{words.length-1}words[i].length)

STL string类

  • 学习参考链接
  • 字符串类,可以直接通过下标访问其中的每个字符元素,通过"+"拼接两个字符串
常用方法功能
length()length()返回字符串长度
insert(pos,key)insert(pos,key)向串中的pospos位置添加一个串keykey
erase(pos,len)erase(pos,len)从串中pospos位置开始删除lenlen个字符,lenlen缺省或越界则删除到结尾
substring(pos,len)substring(pos,len)返回从pospos开始长度为lenlen的子字符串
find(key,pos)find(key,pos)pospos开始查找子串keykey,返回第一次出现的首字符下标,未找到返回一个无穷大值
pospos缺省则默认从头开始
时间复杂度:O(n)O(n),空间复杂度:O(1)
rfind(str,pos)rfind(str,pos)从头到pospos位置中查找子串keykey,返回第一次出现的首字符下标,未找到返回一个无穷大值
find_first_of(key)find\_first\_of(key)返回子串keykey与原字符串第一个相同字符对应的下标

总结

简单的模拟题,就简单复习了一下string,看了每个方法的原型更了解该如何使用其返回值。


欢迎指正与讨论!