码迷,mamicode.com
首页 > 其他好文 > 详细

华为应聘机试题——周期串问题

时间:2015-05-04 13:50:33      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

描述:

题目标题:

  • 题目描述

如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。

例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。

字符串的长度小于等于100,由调用者保证。

 

详细描述:

  • 接口说明

原型:

    int GetMinPeriod(char *inputstring);

输入参数:

    char * inputstring:字符串

返回值:

    int 字符串最小周期

 

知识点:

涉及知识点:

  • C语言基础:字符串

 

性能要求:

建议代码行:

  • 50

 

圈复杂度要求:

  • 这个不由出题者提供,由后续判题系统全局配置
  • 如:函数圈复杂度低于10,类公函数小于20等

 

题目来源: 软件训练营
练习阶段: 初级

        对于这种题目非常经典,是对字符串基本功的考查,最小周期必然是一个大于0且小于字符串长度的数字,所以我们可以初始化周期count=1,然后间隔count的字符相比较,若碰到不匹配的情况,则修改count++,继续间隔count的字符进行比较。需要注意的问题是剩下的字符不够比较怎么办,例如字串abcabdabc,当count=6的时候,最开始的abc和最后的abc是可以匹配的,结束循环后会返回周期count=6,这是有问题的,所以还要判断count与剩下要比较的字符数,对于这个字串长度为9,则6>9-6,则直接返回9。代码放在这里作存档~


#include<iostream>
#include<string>
using namespace std;
/*
功能:计算字符串的最小周期。
原型:
    int GetMinPeriod(char *string);

输入参数:
    char * string:字符串。

返回值:
    int 字符串最小周期。

*/

int GetMinPeriod(char *inputstring)
{
    /*在这里实现功能*/

	int i;
	int count=1;
	for(i=0;i+count<strlen(inputstring);i++)
	{
		if(inputstring[i]!=inputstring[i+count])
		{
			count++;
			if(count>strlen(inputstring)-count) return strlen(inputstring);
			i=0;
		}
	}
	return count;
    return 0;
}

int main()
{
	cout<<GetMinPeriod("abcdbcabc")<<endl;
	return 0;
}




华为应聘机试题——周期串问题

标签:

原文地址:http://blog.csdn.net/wljwsj/article/details/45479447

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!