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

该博客介绍了如何利用摩斯编码和哈希集解决一个字符串处理问题,具体是计算一组单词用摩斯编码表示后的唯一形式。在Java和C++中,通过遍历单词并转换为摩斯编码,然后将编码添加到哈希集中,最后返回哈希集的大小来确定唯一表示的数量。时间复杂度和空间复杂度均为所有单词字符之和。博客还回顾了STL中string类的方法,并提供了相关链接供进一步学习。
摘要由CSDN通过智能技术生成
每日一题做题记录,参考官方和三叶的题解

题目要求

image.png

思路:

按要求模拟就完了,利用哈希表不能存相同值特性,然后通过 U n i c o d e Unicode Unicode计算是已知摩斯密码对应表 d i r dir dir的第几个。

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 = 0 w o r d s . l e n g t h − 1 w o r d s [ i ] . l e n g t h ) O(\sum_{i=0}^{words.length-1}words[i].length) O(i=0words.length1words[i].length),即所有单词长度之和
  • 空间复杂度: O ( ∑ i = 0 w o r d s . l e n g t h − 1 w o r d s [ i ] . l e n g t h ) O(\sum_{i=0}^{words.length-1}words[i].length) O(i=0words.length1words[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 = 0 w o r d s . l e n g t h − 1 w o r d s [ i ] . l e n g t h ) O(\sum_{i=0}^{words.length-1}words[i].length) O(i=0words.length1words[i].length),即所有单词长度之和
  • 空间复杂度: O ( ∑ i = 0 w o r d s . l e n g t h − 1 w o r d s [ i ] . l e n g t h ) O(\sum_{i=0}^{words.length-1}words[i].length) O(i=0words.length1words[i].length)

STL string类

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

总结

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


欢迎指正与讨论!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值