-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMain394.java
More file actions
76 lines (69 loc) · 2.39 KB
/
Main394.java
File metadata and controls
76 lines (69 loc) · 2.39 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package HOT100;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
// 待调整
public class Main394 {
public static String decodeString(String s) {
StringBuffer ans=new StringBuffer();
LinkedList<Integer> multiStack=new LinkedList<>();
LinkedList<StringBuffer> ansStack=new LinkedList<>();
int multi=0;
for(char c:s.toCharArray()){
if(Character.isDigit(c))multi=multi*10+c-'0';
else if(c=='['){
ansStack.add(ans);
multiStack.add(multi);
ans=new StringBuffer();
multi=0;
}else if(Character.isAlphabetic(c)){
ans.append(c);
}else{
StringBuffer ansTmp=ansStack.pop();
int tmp=multiStack.pop();
for(int i=0;i<tmp;i++)ansTmp.append(ans);
ans=ansTmp;
}
}
return ans.toString();
}
public static void main(String[] args) {
String s = "3[a]2[bc]";
System.out.println(decodeString(s));
}
}
class Main394_1{
public String decodeString(String s){
LinkedList<Character> stack = new LinkedList<>();
for(char c: s.toCharArray()){
if(c != ']'){
stack.push(c); // 把所有字母push进去,除了]
}else{
// step 1: 取出[]内的字符串
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty() && Character.isLetter(stack.peek())){
sb.insert(0, stack.pop());
}
String sub = sb.toString();
stack.pop(); // 去除[
// step 2: 获取倍数数字
sb = new StringBuffer();
while (!stack.isEmpty() && Character.isDigit(stack.peek())){
sb.insert(0, stack.pop());
}
int count = Integer.valueOf(sb.toString());
// step 3: 根据倍数把字母再push回去
while (count>0){
for(char ch: sub.toCharArray()){
stack.push(ch);
}
count--;
}
}
}
StringBuilder retv = new StringBuilder();
while (!stack.isEmpty())
retv.insert(0, stack.pop());
return retv.toString();
}
}