1528. 重新排列字符串

题目

给你一个字符串 s 和一个 长度相同 的整数数组 indices 。

请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。

返回重新排列后的字符串。

示例一:

示例

1
2
3
输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3]
输出:"leetcode"
解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。

示例二:

1
2
3
输入:s = "abc", indices = [0,1,2]
输出:"abc"
解释:重新排列后,每个字符都还留在原来的位置上。

示例三:

1
2
输入:s = "aiohn", indices = [3,1,4,2,0]
输出:"nihao"

示例四:

1
2
输入:s = "aaiougrt", indices = [4,0,2,6,7,3,1,5]
输出:"arigatou"

示例五:

1
2
输入:s = "aaiougrt", indices = [4,0,2,6,7,3,1,5]
输出:"arigatou"

提示:

  • s.length == indices.length == n
  • 1 <= n <= 100
  • s 仅包含小写英文字母。
  • 0 <= indices[i] < n
  • indices 的所有的值都是唯一的(也就是说,indices 是整数 0 到 n - 1 形成的一组排列)。

解法

解法一:

构造一个char index的对象数组,排序

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {

public String restoreString(String s, int[] indices) {
List<Entry> entries = new ArrayList<>(s.length());
for (int i = 0;i < s.length();i++) {
entries.add(new Entry(s.charAt(i), indices[i]));
}

Collections.sort(entries);
StringBuilder sb = new StringBuilder();
for (Entry e : entries) {
sb.append(e.getC());
}
return sb.toString();
}
}

class Entry implements Comparable<Entry> {
private int position;

private char c;

public Entry(char c, int position) {
this.c = c;
this.position = position;
}

public int getPosition() {
return position;
}

public void setPosition(int position) {
this.position = position;
}

public char getC() {
return c;
}

public void setC(char c) {
this.c = c;
}

@Override
public int compareTo(Entry o) {
//
return this.getPosition() - o.getPosition();
}
}

解法二:

新生成一个char数组,该数组的第index[i]位就是s的第i个字符

Java

1
2
3
4
5
6
7
public String restoreString(String s, int[] indices) {
char[] chars = new char[s.length()];
for (int i = 0; i < indices.length; i++) {
chars[indices[i]] = s.charAt(i);
}
return new String(chars);
}
0%