字符串S
和 T
只包含小写字符。在S
中,所有字符只会出现一次。
S
已经根据某种规则进行了排序。我们要根据S
中的字符顺序对T
进行排序。更具体地说,如果S
中x
在y
之前出现,那么返回的字符串中x
也应出现在y
之前。
返回任意一种符合条件的字符串T
。
示例:
输入:
S = "cba"
T = "abcd"
输出: "cbad"
解释:
S中出现了字符 "a", "b", "c", 所以 "a", "b", "c" 的顺序应该是 "c", "b", "a".
由于 "d" 没有在S中出现, 它可以放在T的任意位置. "dcba", "cdba", "cbda" 都是合法的输出。
注意:
S
的最大长度为26
,其中没有重复的字符。
T
的最大长度为200
。
S
和T
只包含小写字符。
C
char* customSortString(char* S, char* T)
{
int m=strlen(S);
int n=strlen(T);
char* res=(char*)malloc(sizeof(char)*(n+1));
int k=0;
int a[26]={};
int b[26]={};
for(int i=0;i<n;i++)
{
a[T[i]-'a']++;
}
for(int i=0;i<m;i++)
{
b[S[i]-'a']++;
for(int j=0;j<a[S[i]-'a'];j++)
{
res[k++]=S[i];
}
}
for(int i=0;i<n;i++)
{
if(0==b[T[i]-'a'])
{
res[k++]=T[i];
}
}
res[k]='\0';
return res;
}
C++
class Solution {
public:
string customSortString(string S, string T)
{
string res="";
int a[26]={0};
int b[26]={0};
int m=S.length();
int n=T.length();
for(int i=0;i<n;i++)
{
a[T[i]-'a']++;
}
for(int i=0;i<m;i++)
{
b[S[i]-'a']++;
for(int j=0;j<a[S[i]-'a'];j++)
{
res+=S[i];
}
}
for(int i=0;i<n;i++)
{
if(0==b[T[i]-'a'])
{
res+=T[i];
}
}
return res;
}
};
python
class Solution:
def customSortString(self, S, T):
"""
:type S: str
:type T: str
:rtype: str
"""
res=[]
a=[0 for i in range(26)]
b=[0 for i in range(26)]
for i in range(len(T)):
a[ord(T[i])-ord('a')]+=1
for i in range(len(S)):
b[ord(S[i])-ord('a')]+=1
res+=a[ord(S[i])-ord('a')]*S[i]
for i in range(len(T)):
if 0==b[ord(T[i])-ord('a')]:
res+=T[i]
return ''.join(res)