想法:

若有 a ,b ,c 三个字符

只需要

a->b

b->c

c->a

以此类推

就能保证

1. t的字符集和s的相同(去重后的,也就是说不考虑数量)

2. t的每个位置的字符都和s不同。

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    string s;
    cin>>s;
    unordered_map <char,char> m;
    char a=s[0],b;
  
    for(int i=1;i<s.size();i++)
    {
        if(m.count(s[i])==false)//如果s[i]没有映射关系,就与上一个字符a映射 a->s[i]
		  //如果出现连续相同的,会创建 a->a这样的映射关系,
		  //但是不用担心,最后是能映射到下一个字符或者第一个字符上
        {
            b=s[i];
            m[a]=b;
            a=b;
        }
    }
  
    m[a]=s[0]; //把最后一个没有映射的字符映射到第一个上
    //string output;
  
    if(m.size()==1) //如果只有一组映射,说明是 该字符->该字符,即不满足题意,输出-1
    {
        cout<<"-1";
        return 0;
    }
  
    for(int i=0;i<s.size();i++)//逐位输出字符
    {
        cout<<m[s[i]];
	  //output = output + m[s[i]];
    }
  	//cout<<output;   
}

在最开始的代码中,字符串构建 output 时使用了 output = output + m[s[i]]; 这一操作。导致超时