有效单词缩写
字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 “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 ,判断这个缩写是否可以是给定单词的缩写。
子字符串是字符串中连续的非空字符序列。
class Solution {
public:bool validWordAbbreviation(string word, string abbr) {int abbrsize= abbr.size(),wordsize=word.size();//游标,记录当前判断的位置int abbrLen=0; //num记录字母间的数字大小int num=0; for (int i = 0; i < abbrsize; ++i){if (abbr[i]>='a' && abbr[i]<='z'){abbrLen+=num+1; //数字加字母的长度num=0;//越界或者单词对应位置不相同,直接返回falseif (abbrLen>wordsize || abbr[i]!=word[abbrLen-1]) return false;}else{ //遇到了前导0:当前缩写位置上的字符为0,并且num=0if (!num && abbr[i]=='0') return false;num=num*10+abbr[i]-'0'; //连续遇到两个数字,要拼接起来}}return abbrLen+num==wordsize;}
};