class Solution {
public:
bool validWordAbbreviation(string word, string abbr) {
}
};
408. 有效单词缩写
字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 "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" 。
提示:
1 <= word.length <= 20
word
仅由小写英文字母组成1 <= abbr.length <= 10
abbr
由小写英文字母和数字组成abbr
中的所有数字均符合 32-bit 整数范围原站题解
python3 解法, 执行用时: 40 ms, 内存消耗: 15.9 MB, 提交时间: 2023-10-15 18:09:06
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
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-10-15 18:08:08
func validWordAbbreviation(word string, abbr string) bool { digit := 0 idx := 0 for i := 0; i < len(abbr); i++ { if abbr[i] == '0' && digit == 0 { return false } if abbr[i] >= '0' && abbr[i] <= '9' { digit = digit * 10 + int(abbr[i] - '0') } else { idx += digit digit = 0 if idx >= len(word) || word[idx] != abbr[i] { return false } idx++ } } return len(word) - idx == digit }
javascript 解法, 执行用时: 52 ms, 内存消耗: 41.1 MB, 提交时间: 2023-10-15 18:07:52
/** * @param {string} word * @param {string} abbr * @return {boolean} */ var validWordAbbreviation = function(word, abbr) { var wordLen = word.length; var abbrLen = 0, num = 0; var flag = 1; [...abbr].forEach((value) => { if (value >= 'a' && value <= 'z') { abbrLen += num + 1; num = 0; if (abbrLen > wordLen || value != word[abbrLen-1]) { flag = 0; } } else { if (num == 0 && value == '0') { flag = 0; } num = num * 10 + (value - '0'); } }) return flag && abbrLen + num == wordLen; };
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.3 MB, 提交时间: 2023-10-15 18:07:33
class Solution { public: bool validWordAbbreviation(string word, string abbr) { int len=(int)abbr.length(),wordLen=(int)word.length(); int abbrLen=0,num=0; for (int i=0;i<len;++i){ if (abbr[i]>='a' && abbr[i]<='z'){ abbrLen+=num+1; num=0; if (abbrLen>wordLen || abbr[i]!=word[abbrLen-1]) return false; } else{ if (!num && abbr[i]=='0') return false; // 不能出现前导零 num=num*10+abbr[i]-'0'; } } return abbrLen+num==wordLen; } };