L1-023 输出GPLT (20 分) Go语言|Golang
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例1:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
结尾无空行
GPLTGPLTGLTGLGLL • 1
结尾无空行
这题我的方法比较暴力,如果先用map进行存储,key是字符,value是数字,然后就一直输出,如果有值,即不等于零的时候就输出,直到全部都没了就退出。
package main import "fmt" func main() { var str string stdMap := make(map[rune]int) _,_=fmt.Scan(&str)//GPLT for _,item := range str { //map进行存储,`key`是字符,`value`是数字 if item == 'G' ||item == 'g' { stdMap['G']+=1 }else if item == 'P'|| item == 'p'{ stdMap['P']+=1 }else if item == 'L'|| item == 'l'{ stdMap['L']+=1 }else if item == 'T'|| item == 't'{ stdMap['T']+=1 } } s := "" for { if stdMap['G'] > 0 { // 如果这个大于零 s+="G" // 就让他输出 stdMap['G']-- // 然后让这个自减 } if stdMap['P'] > 0 { s+="P" stdMap['P']-- } if stdMap['L'] > 0 { s+="L" stdMap['L']-- } if stdMap['T'] > 0 { s+="T" stdMap['T']-- } if stdMap['G']==0 && stdMap['P']==0 && stdMap['L']==0 && stdMap['T']==0 { break // 如果全都没有的话,就直接退出了。 } } fmt.Printf("%s",s) }