【Leetcode】408. Valid Word Abbreviation

Given a non-empty string s and an abbreviation abbr, return whether the string matches with the given abbreviation.

class Solution(object):

    def validWordAbbreviation(self, word, abbr):

        """

        :type word: str

        :type abbr: str

        :rtype: bool

        """

        i, j = 0, 0

        m, n = len(word), len(abbr)

        while i

            if word[i]==abbr[j]:

                i += 1

                j += 1

            elif abbr[j]=='0':

                return False

            elif abbr[j].isnumeric():

                k = j

                while k

                    k += 1

                i += int(abbr[j:k])

                j = k

            else:

                return False

        return i==m and j==n

1 这种两个字符串比对的,使用双指针,一个一个比对

2 当对应字符一样时,i=i+1;j=j+1,不一样时,先要判断abbr[j]是不是数字,可以用str.isnumeric()函数来判断,如果是数字,要使用while循环接着往下找,看接下来的字符还是不是数字,直到找到所有数字,用int()函数将这个数字字符转换成数字,用i+这个数字就是新的指针对应的地方。

3 有一点要特别注意,也是我容易犯错的地方,是哪个字符串的变量,就使用在哪个字符串上,不要混着用,比如这里,i就用在word中,j就用在abbr中,不要再abbr中使用i;所以当abbr中需要保留j的位置,又需要找新的数字字符结束的位置时,就需要定义一个新的变量k,用k来记录数字字符结束的位置。同时在这个过程中要判断k是否小于n,因为如果大于等于n,就出错了,因为不存在abbr[n]

4 最后结束判断是i==m and j==n,如果都相等,代表两个字符串全部比对成功,否则是某一个字符已经结束,但是另外一个还有字符,就是不对的

你可能感兴趣的:(【Leetcode】408. Valid Word Abbreviation)