1.3.1
import java.io.IOException;
import edu.princeton.cs.algs4.StdOut;
public class FixedCapacityStackOfStrings {
private String[] a;
private int N;
public FixedCapacityStackOfStrings(int cap){
a = new String[cap];
}
public boolean isEmpty(){
return N == 0;
}
public int size(){
return N;
}
public void push(String item){
a[N++] = item;
}
public String pop(){
return a[--N];
}
public boolean isFull(){
return N == a.length;
}
public static void main(String[] args) throws IOException{
FixedCapacityStackOfStrings s = new FixedCapacityStackOfStrings(10);
while(!s.isFull())
s.push("first");
while(!s.isEmpty())
StdOut.println(s.pop());
}
}
1.3.2
因为题目有“-”,我就按照FixedCapacityStackOfStrings这个类来解这题了:
was
best
times
of
the
was
the
it
1.3.3
b错,0 1是不可能产生的
f错,1 7 2是不可能产生的
g错,0 2是不可能产生的
1.3.4
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.Stack;
import edu.princeton.cs.algs4.StdOut;
public class Parentheses{
private static final char LEFT_PAREN = '(';
private static final char RIGHT_PAREN = ')';
private static final char LEFT_BRACE = '{';
private static final char RIGHT_BRACE = '}';
private static final char LEFT_BRACKET = '[';
private static final char RIGHT_BRACKET = ']';
public static boolean isBalanced(String s){
Stack<Character> stack = new Stack<Character>();
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == LEFT_PAREN)
stack.push(LEFT_PAREN);
if(s.charAt(i) == LEFT_BRACE)
stack.push(LEFT_BRACE);
if(s.charAt(i) == LEFT_BRACKET)
stack.push(LEFT_BRACKET);
if(s.charAt(i) == RIGHT_PAREN){
if(stack.isEmpty())
return false;
if(stack.pop() != LEFT_PAREN)
return false;
}else if(s.charAt(i) == RIGHT_BRACE){
if(stack.isEmpty())
return false;
if(stack.pop() != LEFT_BRACE)
return false;
}else if(s.charAt(i) == RIGHT_BRACKET){
if(stack.isEmpty())
return false;
if(stack.pop() != LEFT_BRACKET)
return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args){
In in = new In();
String s = in.readAll().trim();
StdOut.println(isBalanced(s));
}
}
1.3.5
(书上有答案)
打印N的二进制表示(当N为50 时打印110010)