欢迎来到我的小小世界

Change is a million times less painful than regret

0%

剑指offer58.2左旋转字符串

题目

传送门

解题思路

第一中做法用LinkedList模拟的双栈,效率有点低啊
第二种利用LinkedList的双向性直接头尾添加,一个栈输出。

代码(双栈)

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
class Solution {
public String reverseLeftWords(String s, int n) {
// Char[] a=new Char[s.length];
// a= s.toCharAt();
// StringBuilder str=new StringBuilder(s);
LinkedList<Character> stack1=new LinkedList<>();
LinkedList<Character> stack2=new LinkedList<>();
for (int i =0;i<s.length();i++){
if(n>0){
stack2.addLast(s.charAt(i));
n--;
}
else
stack1.addLast(s.charAt(i));
}
String str="";
while(!stack1.isEmpty()){
str+=stack1.removeFirst();
}
while(!stack2.isEmpty()){
str+=stack2.removeFirst();
}

return str;
}
}

代码(单栈)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public String reverseLeftWords(String s, int n) {
if(s.length()==1) return s;
LinkedList<Character> stack1=new LinkedList<>();
for (int i =n;i<s.length();i++){
stack1.addFirst(s.charAt(i));
}
String str="";
for(int i=0;i<n;i++){
stack1.addFirst(s.charAt(i));
}
while(!stack1.isEmpty()){
str+=stack1.removeLast();
}

return str;
}
}
-------- 本文结束 感谢阅读 --------