LeetCode 809 Expressive Words

LeetCode 809

Expressive Words

  • Problem Description:
    给出一个字符串S和一个字符串数组vector<string>& words,遍历整个数组返回数组中可扩展成字符串S的字符串的数目。对于可扩展的定义,题目认为相同字符必须连续出现三次及以上才认为是可扩展的,若只出现两次是不可扩展的。

    具体的题目信息:
    https://leetcode.com/problems/expressive-words/description/

  • Example:
    • Example 1

      当输入为heeellooo时,题目给出的字符串数组为"hello", "hi", "helo",显然eo都是可扩展的,hl都是不可扩展的,因此符合情况的字符串应该至少有一个heo和两个l
    • Example 2
      当输入为zzzzzyyyyy时,题目给出的字符串数组为"zzyy", "zy", "zyy",显然zy都是可扩展的,因此符合情况的字符串应该至少有一个zy
  • Solution:
class Solution {
public:
    int expressiveWords(string S, vector<string>& words) {
        if (S.length() == 0||words.size() == 0)
            return 0;
            //用flag记录相同字符出现次数,count记录函数返回值
        int flag = 0, k, j, count = 0;
        for (int i = 0; i < words.size(); i++) {
            string temp = words[i];
            for (j = 0, k = 0; j < S.length()&&k<temp.length(); j++, k++) {
                if (temp[k] == S[j]) {
                    while(S[j+1]==S[j]&&j<S.length()-1) {
                    //判断有多少个相同的字符,从而确定该字符是否可扩展
                        j++;
                        flag++;
                    }
                    //单个字符匹配
                    if (flag == 1) {
                        j--;
                    } else if (flag >= 2) {
                    //当首字符匹配且对应字符可扩展时,移动K跳过后面相同的字符
                        while(temp[k+1]==temp[k]&&k<temp.length()-1) {
                            k++;
                        }
                    }
                } else {
                //若出现对应位置字符不同,则该temp字符串不能扩展成S
                    break;
                }
                flag = 0;
            }
            //需要注意的是S的长度不得少于字符串数组中各字符串长度
            if (j == S.length()&&k == temp.length()&&S.length()>=temp.length())
                count++;
        }
        return count;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值