Algorithm
- Parsing A Boolean Expression
上周contest中的一道题目,也是easy。判断一个表达式是true还是false
主要使用栈可以解决
/**
* use stack
*
* @param expression
* @return
*/
public boolean parseBoolExpr(String expression) {
Stack stack = new Stack();
Stack stack2 = new Stack();
for (int i = 0; i < expression.length(); ++ i) {
String sub = expression.substring(i, i +1);
if (",".equals(sub)) {
continue;
}
if ("&".equals(sub) || "|".equals(sub) || "!".equals(sub)) {
stack.push(sub);
}
if ("(".equals(sub) || "f".equals(sub) || "t".equals(sub)) {
stack2.push(sub);
}
if (")".equals(sub)) {
List strs = new ArrayList();
String symb = stack.pop();
String num = stack2.pop();
while(!"(".equals(num)) {
strs.add(num);
num = stack2.pop();
}
String result = doCheck(symb, strs);
stack2.push(result);
}
}
String res = stack2.pop();
if ("f".equals(res)) {
return false;
} else {
return true;
}
}
private String doCheck(String symb, List angs) {
if ("&".equals(symb)) {
return checkAnd(angs);
}
if ("|".equals(symb)) {
return checkOr(angs);
}
return checkNot(angs);
}
private String checkAnd(List angs) {
for (String s : angs) {
if ("f".equals(s)) {
return "f";
}
}
return "t";
}
private String checkOr(List angs) {
for (String s : angs) {
if ("t".equals(s)) {
return "t";
}
}
return "f";
}
private String checkNot(List angs) {
if ("t".equals(angs.get(0))) {
return "f";
} else {
return "t";
}
}
Review
https://www.javaworld.com/article/3276354/java-challengers-2-string-comparisons.html
小结:
Tip
1. 命令
show processlist
select * from information_schema.processlist
上面两个命令效果一致,因为show processlist 显示的信息都是来自MySQL系统库 information_schema 中的 processlist 表。
2. 结果
查询结果字段说明
Id:线程唯一标识,也是information_schema主键
User:启动线程的用户
Host:发送请求的客户端IP和端口号
db:当前执行的命令在哪个数据库上
Command:此刻该线程正在执行的命令。详情可见:8.14.1 Thread Command Values
Time:该线程处于当前状态的时间
State:线程的状态。详情可见:8.14.2 General Thread States
Info:线程执行的语句。一般截断展示,若要查看详情可以使用show full processlist
Rows_sent:
Rows_examined:
3. 说明
功能:显示线程正在运行的状态
何时使用:
也就是说当我们需要确定mysql服务器正在执行的操作时可以调用这个命令,当然图中还给出了其他一些命令提供类似的功能
参考:mysql: show processlist 详解
Share
mysql手册