列表

详情


408. 有效单词缩写

字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 "substitution" 可以缩写为(不止这几种方法):

下列是不合法的缩写:

给你一个字符串单词 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 { public: bool validWordAbbreviation(string word, string abbr) { } };

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;
    }
};

上一题