题目描述
给定一个字符串,判断是否可以排列为“Baidu”
输入描述
输入一个字符串
输出描述
如果能排列为“Baidu”,输出“Yes”,否则输出“No”
Go代码
package main
import "fmt"
func main() {
// 输入t,代表要判断几个字符串
var t int
fmt.Scanf("%d", &t)
// Baidu映射到map
mb := map[rune]int{
'B': 1,
'a': 1,
'i': 1,
'd': 1,
'u': 1,
}
var s string
for i := 0; i < t; i++ {
fmt.Scan(&s)
m := make(map[rune]int)
flag := "Yes"
if len(s) != 5 {
fmt.Println("No")
continue
}
for _, v := range s {
m[v]++
}
for k, v := range mb {
val, ok := m[k]
if !ok {
flag = "No"
break
} else {
if v != val {
flag = "No"
break
}
}
}
fmt.Println(flag)
}
}
题目描述
要求构造一个包含n个回文子串的仅由red三个字母组成的字符串。
题目分析
这道题当时在纸上画了画,想到一个思路,首先只用r填满字符串。一个r包含一个回文串,rr包含3个回文串,rrr包含6个回文串...
说明n个r包含(n+1) * n/2个回文串。
剩下还差几个回文串,就反过来用d, e, r补齐。
Go代码
package main
import "fmt"
func main() {
// 输入n,表示生成的字符串要包含n个回文串
var n int
fmt.Scan(&n)
// 判断先用多少个r
// n个r组成的字符串"rrr...",包含的回文子串的数量为1+2+3+..+n即(n+1)*n/2
i := 1
for ; i < n; i++ {
if (i+1) * i / 2 > n {
break
}
}
s := ""
for j := 0; j < i-1; j++ {
s += "r"
}
// 数量不够的,用e,d,r填补
count := (i-1) * i / 2
for k := 0; k < n-count; k++ {
if k % 3 == 0 {
s += "d"
} else if k % 3 == 1 {
s += "e"
} else {
s += "r"
}
}
fmt.Println(s)
}
第三题等有时间做一下,再补充吧
2024暑期实习陆续开始笔试和面试了,还有很多差距和不足。
如果你愿意和我一同进步,就关注我的公众号“程序员王不错”吧,让我们一起在技术进阶之路上同行!
#百度##百度笔试##暑期实习##暑期实习笔试##后台笔试#