Skip to content

【PAST#01】F - DoubleCamelCase Sort

問題概要

F - DoubleCamelCase Sort

考え方

最初の文字と最後の文字のみが英大文字なので, 英大文字が連続している箇所で分割する。

終了位置が拾えなくなるので、英大文字のバッファを設ける。

分割した文字列を大文字小文字の違いは無視して辞書順ソート、再結合。

Note

入力例

FisHDoGCaTAAAaAAbCAC

出力例

AAAaAAbCACCaTDoGFisH
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 }

submission