2018.1.24 看了半天KMP算法没完全搞懂!明天继续

第一道:

 只使用一个if语句将一个整数之前的所有正整数存到一个字符串中,同时,3的倍数改为fizz,5的倍数为buzz,既是3的倍数又是5的倍数存fizz buzz。

说只能使用一个if语句,所以怎么判断是否为3的倍数,5的倍数就成了问题。

(感觉不能用else if吧,要是能用直接判断就好)

想到了用循环,核心思想是,每三次改为fizz,然后用一个if判断是否为5的倍数。

但是在写的过程中发现。。。。。。

while语句有判断的功能啊...

于是:

    vector<string> fizzBuzz(int n) 
{  
	vector<string> a(n);
	int x=1;
	while(x<=n)
	{
		while(x%3!=0&&x%5!=0&&x<=n)
		{
			a[x-1]=to_string(x);
			x++;
		}
		while(x%3==0&&x%5==0&&x<=n)
		{
			a[x-1]="fizz buzz";
			x++;
		}
		while(x%3!=0&&x%5==0&&x<=n)
		{
			a[x-1]="buzz";
			x++;
		}
		while(x%3==0&&x%5!=0&&x<=n)
		{
			a[x-1]="fizz";
			x++;
		}
	}
    return a;   
} 

 感觉有点..投机取巧?,提交了 AC了...

第二道:

 从一个字符串中找另一个字符串,找到了返回1,没找到返回-1.

挑战说O(n^2)是可接受的,但是可以O(n)吗,还提示KMP算法....

先写一个暴力的:

    int strStr(const char *s, const char *p) {
    if(s==NULL)
    return -1;
    if(p==NULL)
    return -1;
    int sLen = strlen(s);  
    int pLen = strlen(p); 
    int i = 0;  
    int j = 0;  
    while (i < sLen && j < pLen)  
    {  
        if (s[i] == p[j])  
        {  
            i++;  
            j++;  
        }  
        else  
        {  
            i = i - j + 1;  
            j = 0;  
        }  
    }  
    if (j == pLen)  
        return i-j;  
    else  
        return -1; 
    }

  提交了,AC了.

然后去看了KMP算法...

花了不少时间了解了算法,但是关于算法中next数组的求法还不是很熟悉。

由于时间不够,匆忙之中写下博客,明天继续..

争取完成时间复杂度O(n)的

ps:了解后KMP算法的时间复杂度其实是O(m+n).......



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值