1. 程式人生 > >leetcode 791. Custom Sort String(排序字串)

leetcode 791. Custom Sort String(排序字串)

問題描述:

  S and T are strings composed of lowercase letters. In S, no letter occurs more than once.

  S was sorted in some custom order previously. We want to permute the characters of T so that they match the order that S was sorted. More specifically, if x occurs before y in S, then x should occur before y in the returned string.

  Return any permutation of T (as a string) that satisfies this property.

Example :

Input:
S = “cba”
T = “abcd”
Output: “cbad”
Explanation:
“a”, “b”, “c” appear in S, so the order of “a”, “b”, “c” should be “c”, “b”, and “a”.
Since “d” does not appear in S, it can be at any position in T. “dcba”, “cdba”, “cbda” are also valid outputs.

Note:

  • S has length at most 26, and no character is repeated in S.
  • T has length at most 200.
  • S and T consist of lowercase letters only.

思路:

  最先考慮的就是去儲存S中字元的順序,然後對T進行排序。但是順序儲存會十分複雜,所以反過來進行。先對要排序的字串T進行遍歷,得出每個字元各自出現的次數。然後依照S中的順序,把字元按序排列,最後加上沒有排序要求的字元即可。

程式碼:

class Solution {
    public String customSortString(String S, String T) {
        int
[] count = new int[26]; StringBuffer s = new StringBuffer(); for(char c : T.toCharArray()){ count[c - 'a']++; } for(char c : S.toCharArray()){ while(count[c - 'a'] > 0){ s.append(c); count[c - 'a']--; } } for(char c = 'a'; c <= 'z'; c++){ while(count[c - 'a'] > 0){ s.append(c); count[c - 'a']--; } } return s.toString(); } }