C ++中的自定义排序字符串
因此,如果S=“cba”和T=“abcd”,则输出将为“cbad”。这里的“a”,“b”,“c”出现在S中,因此“a”,“b”,“c”的顺序应为“c”,“b”和“a”。由于“d”未出现在S中,因此它可以在T中的任何位置。“dcba”,“cdba”,“cbda”也是有效的输出。
为了解决这个问题,我们将遵循以下步骤-
将ret设置为空字符串
定义一个映射m,并将T中存在的每个字符的频率存储到m中
对于范围从0到S–1的i
ret:=ret+x
x:=S[i]
对于j,范围从0到m[x]–1
m[x]:=0
对于每对,它在m-
因为我的范围是0到它的值–1
ret:=ret连接它的键
如果它的值>0,则
返回ret
例子(C++)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string customSortString(string S, string T) {
string ret = "";
unordered_map <char, int> m;
for(int i = 0; i < T.size(); i++){
m[T[i]]++;
}
for(int i = 0; i < S.size(); i++){
char x = S[i];
for(int j = 0; j < m[x]; j++){
ret += x;
}
m[x] = 0;
}
unordered_map <char, int> :: iterator it = m.begin();
while(it != m.end()){
if(it->second > 0){
for(int i = 0; i < it->second; i++)ret += it->first;
}
it++;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.customSortString("cba", "abcd"));
}输入值
"cba" "abcd"
输出结果
cbad