【PAST#01】F - DoubleCamelCase Sort
問題概要¶
考え方¶
最初の文字と最後の文字のみが英大文字なので, 英大文字が連続している箇所で分割する。
終了位置が拾えなくなるので、英大文字のバッファを設ける。
分割した文字列を大文字小文字の違いは無視して辞書順ソート、再結合。
AC
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
"unicode"
)
var r = bufio.NewReader(os.Stdin)
func main() {
S := ns()
solve(S)
}
func solve(s string) {
rs := []rune(s + "A")
ss := []string{}
var a int
for i := 0; i < len(rs)-1; i++ {
if unicode.IsUpper(rs[i]) && unicode.IsUpper(rs[i+1]) {
if i+1-a < 2 {
continue
}
ss = append(ss, string(rs[a:i+1]))
a = i + 1
}
}
sort.Slice(ss, func(i, j int) bool {
return strings.ToLower(ss[i]) < strings.ToLower(ss[j])
})
fmt.Println(strings.Join(ss, ""))
}
func ns() string { var s string; fmt.Fscan(r, &s); return s }