【百度研发岗实习笔试】
第二题要求构造一个包含n个回文子串的仅由red三个字母组成的字符串。
此题是一个思维题,这里提供一个构造思路。由m个"r"连续构成的字符串,将会有$n*(n+1)/2$个回文子序列,而"red"只能够组成3个回文子序列,那么先对连续的"r"排列,直到最后一个"r"排列后,字符串不能允许更多的"r"排进来。然后就将"edr"排进来,直到满足n个回文子串个数。
// 题目: 有且只有"r" "e" "d"三个字母,给定一个数字n,要求输出由3个字母所组成的包含n个回文串的 // 字符串 // redred package main import "fmt" func main(){ var n int fmt.Scanf("%d" , &n) count := 0 for i :=0 ; i < n ; i++{ if (i+1)*i/2 > n{ count = i - 1 break } } s := "" for i:=0 ; i < count ; i++{ s += "r" } res := n - (count + 1)*count/2 for i:=0 ; i<res ; i++{ if i%3 == 0{ s += "e" }else if i%3 == 1{ s += "d" }else { s += "r" } } fmt.Println(s) }