942. 增减字符串匹配

题目

给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。

返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有:

如果 S[i] == "I",那么 A[i] < A[i+1]
如果 S[i] == "D",那么 A[i] > A[i+1]

示例1:

1
2
输出:"IDID"
输出:[0,4,1,3,2]

示例2:

1
2
输出:"DDI"
输出:[3,2,0,1]

示例3:

1
2
输出:"III"
输出:[0,1,2,3]

提示:

  • 1 <= S.length <= 10000
  • S 只包含字符 "I""D"

解法

解法一:

双指针。begin和end指向一头一尾。每次碰到I,就把begin赋值给当前结果数组,然后自增1;遇到D就把end赋值给当前结果数据,然后自减1

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int[] diStringMatch(String S) {
int[] result = new int[S.length() + 1];
int index = 0;
int begin = 0;
int end = S.length();
for (int i = 0;i < S.length();i++) {
if ('I' == S.charAt(i)) {
result[index++] = begin++;
} else {
result[index++] = end--;
}
}
result[index] = begin;
return result;
}
0%