804. 唯一摩尔斯密码词
题目描述
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
'a'
对应".-"
,'b'
对应"-..."
,'c'
对应"-.-."
,以此类推。为了方便,所有
26
个英文字母的摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给你一个字符串数组
words
,每个单词可以写成每个字母对应摩尔斯密码的组合。
- 例如,
"cab"
可以写成"-.-..--..."
,(即"-.-."
+".-"
+"-..."
字符串的结合)。我们将这样一个连接过程称作 单词翻译 。对
words
中所有单词进行单词翻译,返回不同 单词翻译 的数量。示例 1:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".
示例 2:
输入:words = ["a"]
输出:1
解题思路
首先根据字典的映射关系,将小写字母转化为摩斯密码,得到目标字典。遍历所给列表中的每个单词的每个字母,在字典中查找,将返回结果每个单词拼在一起,用一个列表容纳,最终用set返回这个列表中不重复的元素个数。
解题代码
1. def uniqueMorseRepresentations(words: list[str]): 2. list_1 = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", 3. "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."] 4. list_2 = ["abcdefghijklmnopqrstuvwxyz"] 5. str_dic = {} 6. for i in range(len(list_1)): 7. str_dic[list_2[0][i]] = list_1[i] 8. result = [] 9. for word in words: 10. temp_str = "" 11. for j in word: 12. temp_str += str_dic[j] 13. result.append(temp_str) 14. 15. return len(set(result))
806. 写字符串需要的行数
题目描述
我们要把给定的字符串
S
从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组widths
,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。现在回答两个问题:至少多少行能放下
S
,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。
示例 1:
输入:
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
输出: [3, 60]
解释:
所有的字符拥有相同的占用单位10。所以书写所有的26个字母,
我们需要2个整行和占用60个单位的一行。
示例 2:
输入:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
输出: [2, 4]
解释:
除去字母'a'所有的字符都是相同的单位10,并且字符串 "bbbcccdddaa" 将会覆盖 9 * 10 + 2 * 4 = 98 个单位.
最后一个字母 'a' 将会被写到第二行,因为第一行只剩下2个单位了。
所以,这个答案是2行,第二行有4个单位宽度。
解题思路
首先根据字典的特性,将字母转化为对应的数字。涉及到列表内部的运算用指针更加方便,当当前和小于等于100,而再加下一个值时大于一百,行数+1,并且,下一个值为下一行的开始值。如果while循化结束count任然等于一,说明没有出现换行的情况,直接return,否则继续判断。如果最后一行正好到字符串最后一个结束,那么返回所有和和行数,否则需要对最后一行进行求和。
解题代码
1. def numberOfLines(widths: list[int], s: str) -> list[int]: 2. str_1 = "abcdefghijklmnopqrstuvwxyz" 3. str_dic = {} 4. for i in range(len(widths)): 5. str_dic[str_1[i]] = widths[i] 6. # 定义指针 7. l_p = 0 8. count = 0 9. temp_all = 0 10. target_list = [] 11. while l_p<=len(s)-2: 12. temp_all += str_dic[s[l_p]] 13. if (temp_all<=100) and (temp_all + str_dic[s[l_p + 1]] >100): 14. # 行数+1 15. count += 1 16. target_list.append(l_p+1) 17. # l_p += count+1 18. temp_all = 0 19. # l_p += 1 20. l_p += 1 21. if count == 0: 22. return [1,temp_all+str_dic[s[l_p]]] 23. if len(s) == target_list[-1]: 24. pass 25. else: 26. count += 1 27. 28. if target_list == []: 29. return [count,temp_all] 30. rest_list = s[target_list[-1]::] 31. fin_result = 0 32. for i in rest_list: 33. fin_result += str_dic[i] 34. return [count,fin_result]
824. 山羊拉丁文
题目描述
给你一个由若干单词组成的句子
sentence
,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:
- 如果单词以元音开头(
'a'
,'e'
,'i'
,'o'
,'u'
),在单词后添加"ma"
。
- 例如,单词
"apple"
变为"applema"
。
- 如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加
"ma"
。
- 例如,单词
"goat"
变为"oatgma"
。
- 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母
'a'
,索引从1
开始。
- 例如,在第一个单词后添加
"a"
,在第二个单词后添加"aa"
,以此类推。返回将
sentence
转换为山羊拉丁文后的句子。示例 1:
输入:sentence = "I speak Goat Latin"
输出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
示例 2:
输入:sentence = "The quick brown fox jumped over the lazy dog"
输出:"heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
解题思路
首先定义元音列表,判断单词的首字母是不是元音字母,if-else分支判断,在判断之前需要split一下,最后一不要忘记添加空格就可以了。中间具体怎么添加,添加什么,根据题目要求来就可以了。
解题代码
1. def toGoatLatin(sentence: str) -> str: 2. list_1 = ['a', 'e', 'i', 'o', 'u',"A","E","I","O","U"] 3. result = "" 4. count = 0 5. for i in sentence.split(" "): 6. if i == " ": 7. result += " " 8. else: 9. count += 1 10. if i[0] in list_1: 11. i += "ma" 12. else: 13. if len(i) == 1: 14. i += "ma" 15. else: 16. temp = i[0] 17. # print(i[1::]) 18. i = i[1::] 19. i += temp 20. i += "ma" 21. i += "a"*count 22. i += " " 23. result += i 24. return result[:-1:]