字符串查找之暴力匹配法

问题描述:在长度为m的字符串source中,寻找长度为n的字符串target。如果source字符串中存在target字符串,则返回字符串target第一次在字符串source中出现的位置;如果不存在,则返回-1。

       一个最朴素的想法是使用暴力匹配法:将source中的字符与target中的字符逐一比较,如果source的当前字符与target的首字符相等,则继续比较它们的下一字符,直到出现了不等的字符或遍历了target所有字符。如果出现了不等的字符,则继续比较source的下一个和target的首字符,并重复上述过程。如果target的所有字符都被遍历了,则说明source字符串和target字符串相等。暴力匹配法的主要缺点是时间复杂度太高,需要O(n•m)时间。代码如下:

class Solution 
{
public:
    /*
     * @param source: source string to be scanned.
     * @param target: target string containing the sequence of characters to match
     * @return: a index to the first occurrence of target in source, or -1  if target is not part of source.
     */
    int strStr(const char *source, const char *target) 
    {
        if (source == nullptr || target == nullptr)
        {
            return -1;
        }
        
        if (strlen(source) < strlen(target))
        {
            return -1;
        }

        if (strlen(target) == 0)
        {
            return 0;
        }
        
        for (int i = 0; i < strlen(source) - strlen(target) + 1; i++)
        {
            int j = 0;
            for (j = 0; j < strlen(target); j++)
            {
                if (source[i+j] != target[j])
                {
                    break;
                }
            }
            
            if (j == strlen(target))
            {
                return i;
            }
        }
        
        return -1;
    }
};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值