How to reverse a string in Go?

前端 未结 28 1921
天涯浪人
天涯浪人 2020-12-04 06:45

How can we reverse a simple string in Go?

28条回答
  •  粉色の甜心
    2020-12-04 07:25

    There are too many answers here. Some of them are clear duplicates. But even from the left one, it is hard to select the best solution.

    So I went through the answers, thrown away the one that does not work for unicode and also removed duplicates. I benchmarked the survivors to find the fastest. So here are the results with attribution (if you notice the answers that I missed, but worth adding, feel free to modify the benchmark):

    Benchmark_rmuller-4   100000         19246 ns/op
    Benchmark_peterSO-4    50000         28068 ns/op
    Benchmark_russ-4       50000         30007 ns/op
    Benchmark_ivan-4       50000         33694 ns/op
    Benchmark_yazu-4       50000         33372 ns/op
    Benchmark_yuku-4       50000         37556 ns/op
    Benchmark_simon-4       3000        426201 ns/op
    

    So here is the fastest method by rmuller:

    func Reverse(s string) string {
        size := len(s)
        buf := make([]byte, size)
        for start := 0; start < size; {
            r, n := utf8.DecodeRuneInString(s[start:])
            start += n
            utf8.EncodeRune(buf[size-start:], r)
        }
        return string(buf)
    }
    

    For some reason I can't add a benchmark, so you can copy it from PlayGround (you can't run tests there). Rename it and run go test -bench=.

提交回复
热议问题