周末感冒啊,头疼,各种不舒服,难搜,香菇,大家千万注意身体啊。本周算法题目是一个涉及栈的题目, Review 方面接着上周看了一半的 RxJava 系列,身体原因只看了一篇。

Algorithm

题目描述

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

> Input: "()"
> Output: true
>

这个题目和算数运算应该都是属于一个系列的,利用栈来判断括弧是否匹配,进而判断优先级并进行运算处理。

Java

public boolean isValid(String s) {
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
char temp = stack.pop();
if (c != map.get(temp)) {
return false;
}
}
}
return stack.isEmpty();
}

Python

def isValid(self, s: str) -> bool:
dic = {'(': ')', '[': ']', '{': '}'}
lst = []
for c in s:
if c in dic.keys():
lst.append(c)
else:
if len(lst) == 0:
return False
if c != dic[lst.pop()]:
return False
return len(lst) == 0
Runtime Memory Language
28 ms 13.3 MB python
2 ms 33.5 MB java

Review

本周阅读学习 RxJava系列的文章。主要讲述了 Observable 其它使用操作:

  • Delay: 将所有元素的操作延时一定时间;
  • Do:注册一个 Observable 对象生命周期的 action 来执行相关操作doOnNextdoOnCompleteddoOnEachdoOnSubscribe
  • Materialize/Dematerialize
  • ObserveOn: 指定后台线程;
  • SubscribeOn:前台回调的线程;
  • Timeout: 在超出一定时间后还没有传递时间时会有错误事件传递,即执行onError
  • Timestamp:将传递的元素转换成Timestamped<T>类型的数据,里面不仅包含了原有的数据,还包含元素传递的时间;
  • Using:创建一个一次性的资源,此资源和 Observable 对象拥有相同的生命周期

Exploring RxJava in Android — Utility Operators

Tips

  1. Android 中计时控件可以用 Chronometer,其本质还是一个 TextView。

  2. SQL 中的LIKE关键字,可以搭配 %或者_使用,其中百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符,两者可以组合使用。

  3. Android 中跑 monkey 命令

    adb shell monkey [options] <event-count>

    option 参数部分可以指定monkey 的包名,事件类型及比例等。

  4. 本地仓库关联远程:

    git remote add origin https://github.com/user_name/repositories_name.git

Share

Python中stack(),vstack(),hstack()的用法和区别