看了下没有Go的题解我来补充下(真的没人用Go刷题了吗

题意

构造一个和s 长度相同且所用字符集相同的字符串,并且要求每个位置都和 s 不同

考点

字符串 哈希表 构造

思路

可以考虑把每个字符都往后挪一位,比如当前s的字符集为a,b,d,z ,那么在构造s的时候,把之前的a换成b,把b换成d,把d换成z,把z换成a

Go代码

我永远讨厌Go做字符串题

package main

import (
    "fmt"
)

func main() {
    var s string 
    fmt.Scan(&s)
    if len(s) == 0 {
        fmt.Println("-1")
        return 
    }
    mp := make(map[rune]struct{},27)
    for _,val := range s {
        mp[val] = struct{}{}
    }
    if len(mp) == 1 {
        fmt.Println("-1")
        return 
    }
    ans := make(map[rune]rune)
    for i := 'a'; i <= 'z'; i ++ {
        if _,ok := mp[i]; !ok {
            continue
        }
        for j := 1; j < 26; j ++ {
            tmp := (int(i - 'a') +j)%26
            if _,ok := mp[rune(tmp + 'a')]; ok {
                ans[i] = rune(tmp + 'a')
                break 
            }
        }
    }
    //每个位置都和s不同
    for _,val := range s  {
        fmt.Print(string(ans[val]))
    }
    
}