力扣第 282 场周赛 :统计包含给定前缀的字符串

1,281 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、问题描述

给你一个字符串数组 words 和一个字符串 pref ,返回 words **中以 pref 作为 前缀 的字符串的数目。

字符串 s 的 前缀 就是  s 的任一前导连续字符串。

题目链接:统计包含给定前缀的字符串

二、题目要求

样例1

输入: words = ["pay","attention","practice","attend"], pref = "at"
输出: 2
解释: 以 "at" 作为前缀的字符串有两个,分别是:"attention""attend"

样例2

输入: words = ["leetcode","win","loops","success"], pref = "code"
输出: 0
解释: 不存在以 "code" 作为前缀的字符串。

考察

1.字符串的应用
2.建议用时10~25min

三、问题分析

这一题比较简单,我们可以利用C++ String类里面的查找方法解决这一题。

函数用法
查找(查找成功返回元素位置,失败返回-1)
s.find('A')查找字符A
s.find("ABC")查找字符串ABC
s.find('A',2)从位置2开始查找字符A
s.find("ABCD",1,2)从位置1开始,查找ABCD的前两个字符
s.rfind()从字符串尾部开始查找
如果满足words[i].find(pref)==0,那么不就代表字符串pref是words[i]的前缀吗?

这篇文章的总结提高部分对String有详细的介绍:算法题每日一练---第22天:猜字母

四、编码实现

class Solution {
public:
    int prefixCount(vector<string>& words, string pref) {
        int i,ans=0,n=words.size();//初始化
        for(i=0;i<n;i++)//循环判断
        {
            if(words[i].find(pref)==0)//判断是否为前缀
            {
                ans++;//计数器++
            }
        }
        return ans;//输出结果
        
    }
};

五、测试结果

2.png

1.png