本文已参与「新人创作礼」活动,一起开启掘金创作之路。
| 每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:
按要求模拟就完了,利用哈希表不能存相同值特性,然后通过计算是已知摩斯密码对应表的第几个。
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();
}
}
- 时间复杂度:,即所有单词长度之和
- 空间复杂度:
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();
}
};
- 时间复杂度:,即所有单词长度之和
- 空间复杂度:
STL string类
- 学习参考链接
- 字符串类,可以直接通过下标访问其中的每个字符元素,通过"+"拼接两个字符串
| 常用方法 | 功能 |
|---|---|
| 返回字符串长度 | |
| 向串中的位置添加一个串 | |
| 从串中位置开始删除个字符,缺省或越界则删除到结尾 | |
| 返回从开始长度为的子字符串 | |
| 从开始查找子串,返回第一次出现的首字符下标,未找到返回一个无穷大值 缺省则默认从头开始 时间复杂度:,空间复杂度:O(1) | |
| 从头到位置中查找子串,返回第一次出现的首字符下标,未找到返回一个无穷大值 | |
| 返回子串与原字符串第一个相同字符对应的下标 |
总结
简单的模拟题,就简单复习了一下string,看了每个方法的原型更了解该如何使用其返回值。
| 欢迎指正与讨论! |