String

Tips:

  • StringBuilder 效率更高,新建一个String用StringBuilder更好。
  • Should always consider "" in a string. You should think: if the string is "", we will not reach charAt(0).

Edge Case:

  • null,
  • ""
  • integer length
  • int digit = str.charAt(i) - '0';

Compare:

Use **str1.equals(str2);**
s.isEmpty()

remove whitespace leading and trailing

str = str.trim();

StringBuilder

  • reverse();
  • append(sth);
  • insert(int position, sth);
  • toString();
  • str = new StringBuilder(); //clear a string builder

Basic of stack:

construct new stack:

Stack st = new Stack(); 
Stack<Character> strs = new Stack<Character>();

Class Stack< E>

push();     // push items on the top of the stack

//you must push something here!, not just stack.push();

pop();      // remove the object at the top of the stack
empty();    // check if the stack is empty
peek();     // looks at the top of the stack without removing it

Character

ASCII: [A-Z]:65-90, [a-z]:97-122

Character.isLetterOrDigit() Character.isLetter()

从上一个字符串中遍历处理信息存到下一个字符串问题

  1. 如果edge case 只有开头一个,可以通过正确设置初始条件和循环进入条件解决吗?即让初始条件为开头的信息,不让初始条件的传递函数进入循环。
  2. 两个字符串问题在脑中形成两个可以加筹码的串,从而看什么时候拿掉所有的筹码,什么时候应该把一个串的值付给另一个;count 可以看成一个具有reset功能的计数器,每次达到临界点(!=or末尾)就要清到1.
  3. 相邻两个char作比较向前比较比较好,但是要注意不能让length=1的string进入到loop中。
  4. 对每个串的功能要有清醒的认识:比如说此题(38),str就是要从空一点点加,所以在循环开始就应将其设为空。而last是为了储存上一轮str的字符串,因此要在str清空之前将值赋给last。此时要看last的初始值是否被设定。

String 长度问题

  • String的长度问题全部转化成index或第n个来考虑再相加减,此时长度就变成了str1.length() - str2.length();不过也要具体问题具体分析,题目是求index还是第几个呢?分别考虑。

String 两边字符串遍历

  • continue相当于说,必须满足我才能进行循环的其他项,否则就连续先保证满足我。