算法基础:周期串问题

算法基础:周期串问题,第1张

概述如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。 输入参数: 字符串 返回值: 字符串最小周期 代码实现: package huaweiimport ( "bufio" "fmt" "os")func Test1Base() { fmt.Println("Ple 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。

输入参数: 字符串

返回值: 字符串最小周期

代码实现:

package huaweiimport (	"bufio"	"fmt"	"os")func Test1Base() {	fmt.Println("Please input the res string:")	//从控制台读取数据	inputReader := bufio.NewReader(os.Stdin)	s,err := inputReader.ReadString('\n')	checkerror(err,"Reading data from command line")	//去除末尾换行符	s = string(s[:len(s)-1])	period := getMinPeriod(s)	fmt.Println("period:",period)}//获取字符串最小周期func getMinPeriod(s string) int {	resChars := []rune(s)	for count := 1; count <= len(resChars)/2; count++ {		if checkPeriod(resChars[:count],resChars) {			return count		}	}	return -1}//判断testChars是否为resChars的一个周期,如abc是abcabcabc的一个周期func checkPeriod(testChars []rune,resChars []rune) bool {	testLen,resLen := len(testChars),len(resChars)	//不是整数倍,直接返回false	if resLen%testLen != 0 {		return false	}	for i := testLen; i < resLen; i += testLen {		if !checkSliceEqual(resChars[i:i+testLen],testChars) {			return false		}	}	return true}//判断两个slice的元素是否相同func checkSliceEqual(a []rune,b []rune) bool {	if len(a) != len(b) {		return false	}	for i := 0; i < len(a); i++ {		if a[i] != b[i] {			return false		}	}	return true}
总结

以上是内存溢出为你收集整理的算法基础:周期串问题全部内容,希望文章能够帮你解决算法基础:周期串问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存