要求
字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 "substitution" 可以缩写为(不止这几种方法):
-
"s10n" ("s ubstitutio n")
-
"sub4u4" ("sub stit u tion")
-
"12" ("substitution")
-
"su3i1u2on" ("su bst i t u ti on")
-
"substitution" (没有替换子字符串) 下列是不合法的缩写:
-
"s55n" ("s ubsti tutio n",两处缩写相邻)
-
"s010n" (缩写存在前导零)
-
"s0ubstitution" (缩写是一个空字符串) 给你一个字符串单词 word 和一个缩写 abbr ,判断这个缩写是否可以是给定单词的缩写。
子字符串是字符串中连续的非空字符序列。
示例 1:
输入:word = "internationalization", abbr = "i12iz4n"
输出:true
解释:单词 "internationalization" 可以缩写为 "i12iz4n" ("i nternational iz atio n") 。
示例 2:
输入:word = "apple", abbr = "a2e"
输出:false
解释:单词 "apple" 无法缩写为 "a2e" 。
核心代码
class Solution:
def validWordAbbreviation(self, word: str, abbr: str) -> bool:
point,num,lg = 0,0,len(word)
for i in abbr:
if i.isdigit():
if num == 0 and i == "0":
return False
num = num * 10 + int(i)
continue
if num:
point += num
num = 0
if point >= lg or word[point] != i:
return False
point += 1
return True if point + num == lg else False
解题思路:循环遍历即可解题:对于数字,尤其多位数字我们需要维护一个临时的num用于记录。当出现多位数字时,使用num = num * 10 + int(i)的方式追加。每次在指针追加num后,都需要判断指针是否以超过word总长。对于数字出现在最后的问题,需要在末尾添加point+num的操作后再进行判断,整体来说比较简单。