每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:
按要求模拟就完了,利用哈希表不能存相同值特性,然后通过 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.length−1words[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.length−1words[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.length−1words[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.length−1words[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,看了每个方法的原型更了解该如何使用其返回值。
欢迎指正与讨论! |