From e5fca8a7a9b5684cfbca520ceb34e91051288219 Mon Sep 17 00:00:00 2001 From: VicRen Date: Fri, 11 Dec 2020 10:19:38 +0800 Subject: [PATCH] 20201211 --- 20201211/main.go | 47 +++++++++++++++++++++++++++++++++++++++++++ 20201211/main_test.go | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 20201211/main.go create mode 100644 20201211/main_test.go diff --git a/20201211/main.go b/20201211/main.go new file mode 100644 index 0000000..421d189 --- /dev/null +++ b/20201211/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "strings" +) + +//给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。 +// +//如果剩余字符少于 k 个,则将剩余字符全部反转。 +//如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 + +func main() { + +} + +func process(k int, s string) string { + sb := strings.Builder{} + l := 0 + r := 2 * k + for { + fmt.Println(l, r) + if r > len(s) { + if l > len(s) { + sb.WriteString(s[r-2*k:]) + } else { + sb.WriteString(reverse(s[l : l+k])) + sb.WriteString(s[l+k:]) + } + break + } + sb.WriteString(reverse(s[l : l+k])) + sb.WriteString(s[l+k : r]) + l += 2 * k + r += 2 * k + } + return sb.String() +} + +func reverse(s string) string { + src := []rune(s) + l := len(src) + for i := 0; i < l/2; i++ { + src[i], src[l-i-1] = src[l-i-1], src[i] + } + return string(src) +} diff --git a/20201211/main_test.go b/20201211/main_test.go new file mode 100644 index 0000000..bbe2f9b --- /dev/null +++ b/20201211/main_test.go @@ -0,0 +1,39 @@ +package main + +import "testing" + +func Test_process(t *testing.T) { + type args struct { + k int + s string + } + tests := []struct { + name string + args args + want string + }{ + { + "test1", + args{ + 2, + "abcdefg", + }, + "bacdfeg", + }, + { + "test2", + args{ + 4, + "abcdefg", + }, + "dcbaefg", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := process(tt.args.k, tt.args.s); got != tt.want { + t.Errorf("process() = %v, want %v", got, tt.want) + } + }) + } +}