package main
import (
"fmt"
"math"
)
func reverseMiddleNCharacters(str string, N int) string {
if N <= 0 || N > len(str) {
return str
}
start := int(math.Floor(float64(len(str) - N) / 2))
end := start + N
beforeMiddle := str[:start]
middle := reverseString(str[start:end])
afterMiddle := str[end:]
return beforeMiddle + middle + afterMiddle
}
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(runes) - 1; i < j; i, j = i + 1, j - 1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func main() {
s := "abCDEFgh"
N := 4
fmt.Println(reverseMiddleNCharacters(s, N))
}
/*
run:
abFEDCgh
*/