题目:
字符串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只包含小写字符。
代码一:
个人思路:定义一个int的坐标a,坐标前的是已经排序好的,坐标后的是待排序的。遍历S,然后遍历T,对每个t进行比较,如果相同,将它和a位置的值互换,a移向下一位。
class Solution {
public String customSortString(String S, String T) {
if(T==null||T.length()==0){
return T;
}
char[] s=S.toCharArray();
char[] t=T.toCharArray();
int a=0;
for(int i=0;i<s.length;i++){
for(int j=a;j<t.length;j++){
if(t[j]==s[i]){
char w=t[j];
t[j]=t[a];
t[a]=w;
a++;
}
}
}
return new String(t);
}
}
代码二:
个人思路:统计 T 中每个字符出现的次数,把结果存储在数组 count 中,count[char] 表示字符 char 出现的次数。然后把在 S 中出现的字符按照在 S 中的相对顺序排列,剩余字符添加到当前字符串的后面,最终排好序的字符串顺序为 S + (未在 S 中出现的字符)。
class Solution {
public String customSortString(String S, String T) {
int[] count = new int[26];
for (char c: T.toCharArray())
count[c - 'a']++;
StringBuilder ans = new StringBuilder();
for (char c: S.toCharArray()) {
for (int i = 0; i < count[c - 'a']; ++i)
ans.append(c);
count[c - 'a'] = 0;
}
for (char c = 'a'; c <= 'z'; ++c)
for (int i = 0; i < count[c - 'a']; ++i)
ans.append(c);
return ans.toString();
}
}