解法一:双指针

一开始想用正则表达式偷懒,结果发现超时了。。。
用两个指针一起遍历 nametyped 。每次将name中连续的相同字符遍历完,如果满足长按键入,那么typed中对应位置应该有等长或更长的连续相同字符序列。
最后注意边界条件的判断。

  1. class Solution {
  2. public boolean isLongPressedName(String name, String typed) {
  3. int pA = 0, pB = 0;
  4. final int lenA = name.length(), lenB = typed.length();
  5. int cnt = 0;
  6. char ch;
  7. while ((pA < lenA) && (pB < lenB)) {
  8. ch = name.charAt(pA);
  9. cnt = 1;
  10. ++pA;
  11. while ((pA < lenA) && (ch == name.charAt(pA))) {
  12. ++cnt;
  13. ++pA;
  14. }
  15. while ((pB < lenB) && (ch == typed.charAt(pB))) {
  16. --cnt;
  17. ++pB;
  18. }
  19. if (cnt > 0) {
  20. return false;
  21. }
  22. }
  23. if ((pA < lenA) || (pB < lenB)) {
  24. return false;
  25. }
  26. return true;
  27. }
  28. }