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

描述:
题目标题:

  • 题目描述

如果一个字符串可以由某个长度为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;
}
时间: 2024-07-30 02:00:31

华为应聘机试题——周期串问题的相关文章

2015年华为校招机试题和代码实现(分解字符串,拼音转数字,去除重复字符并排序,等式变换)

再来一套2015年的华为机试题. 第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345678","90000000" 分析思路: 容易题 1.获得字符串的长度length后,判断与要输出位数N的大小,大于N的话,直接printf前N位字符,然

华为2014机试题(一)

过几天就要进行华为的机试了,今儿临时抱抱佛脚,在网上找到2014届华为校招的机试题,琢磨了一会儿,贴出来记录下. 首先感谢一下Hackbuteer提供的题目:http://blog.csdn.net/hackbuteer1/article/details/11132567 对于第一题,字符过滤.最简单也是最直接的就是HASH.题目规定了输入序列只能为小写字符'a~z'.因此直接开辟一个大小为26的数组用于记录当前字符是否已经出现即可. 需要注意的问题: 1. hash数组记得初始化 2. pOu

2013 华为校招机试题

第一题: 删除字符串中所有给定的子串(40分)问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作.要求实现函数:int delete_sub_str(const char *str, const char *sub_str, char *result_str)[输入] str:输入的被操作字符串,sub_str:需要查找并删除的特定子字符串[输出] result_str:在str字符串中删除所有sub_str子字符串后的结果[返回] 删除的子字符串的个数注:I.

华为Java机试题

1.程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果. 程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符. package com.xcbeyond; /** * @author <span style="font-family:宋体;">xcbeyond</span> * 2015-5-7下午10:37:43 * 1.程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输

2014 华为校招机试题(c/c++开发类)

第一题: 1.2.3....n盏灯,同时有n个人, 第1个人将1的倍数的灯拉一下, 第2个人将2的倍数的灯拉一下, ...... 问最后有几盏灯是亮的, 初始状态下灯是灭的, 输入整数n(n<65536), 输出亮的灯数 方法解析:设置一个map,关键字为灯的编号,值为0或1,分别表示灯灭和灯亮状态,遍历map,第i个灯,将所有i倍数的灯进行一次取反操作,也可以通过数组实现.代码如下: [cpp] view plaincopy #include "stdafx.h" #inclu

[LeetCode 85] Maximal Rectangle (华为2015机试)

题目链接:maximal-rectangle import java.util.Arrays; /** * Given a 2D binary matrix filled with 0's and 1's, * find the largest rectangle containing all ones and return its area. * */ public class MaximalRectangle { // 65 / 65 test cases passed. // Status

[华为机试练习题]1.周期串问题

题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3).字符串的长度小于等于100,由调用者保证. 接口说明 原型: int GetMinPeriod(char *inputstring); 输入参数: char * inputstring:字符串 返回值: int 字符串最小周期 代码一 /*-----------------------------------

华为的一道机试题--等式变换

华为的一道机试题 (http://blog.csdn.net/zombie_slicer/article/details/37346025) 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入:       正整数,等式右边的数字 输出:       使该等式成立的个数 样

华为机试题3

[编程题] 明明的随机数 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数 字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成 “去重”与“排序”的工作. Input Param n               输入随机数的个数 inputArray      n个随机整数组成的数组 Return Value