844. 比较含退格的字符串

  1. class Solution {
  2. public boolean backspaceCompare(String S, String T) {
  3. int len1 = S.length();
  4. int len2 = T.length();
  5. Deque<Character> stack1 = new LinkedList<>();
  6. Deque<Character> stack2 = new LinkedList<>();
  7. for (int i = 0; i < len1; i++) {
  8. Character c = S.charAt(i);
  9. if (!stack1.isEmpty() && c == '#') {
  10. stack1.pollLast();
  11. } else if (stack1.isEmpty() && c== '#') {
  12. continue;
  13. } else {
  14. stack1.offerLast(c);
  15. }
  16. }
  17. for (int i = 0; i < len2; i++) {
  18. Character c = T.charAt(i);
  19. if (!stack2.isEmpty() && c == '#') {
  20. stack2.pollLast();
  21. } else if (stack2.isEmpty() && c == '#') {
  22. continue;
  23. } else {
  24. stack2.offerLast(c);
  25. }
  26. }
  27. if (stack1.size() != stack2.size()) {
  28. return false;
  29. }
  30. while (!stack1.isEmpty() && !stack2.isEmpty()) {
  31. Character c1 = stack1.pollFirst();
  32. Character c2 = stack2.pollFirst();
  33. if (c1 != c2) {
  34. return false;
  35. }
  36. }
  37. return true;
  38. }
  39. }
  1. class Solution {
  2. public boolean backspaceCompare(String S, String T) {
  3. int len1 = S.length() - 1;
  4. int len2 = T.length() - 1;
  5. int skip1 = 0;
  6. int skip2 = 0;
  7. while (len1 >= 0 || len2 >= 0) {
  8. while (len1 >= 0) {
  9. if (S.charAt(len1) == '#') {
  10. ++skip1;
  11. --len1;
  12. } else if (skip1 > 0) {
  13. --skip1;
  14. --len1;
  15. } else {
  16. break;
  17. }
  18. }
  19. while (len2 >= 0) {
  20. if (T.charAt(len2) == '#') {
  21. ++skip2;
  22. --len2;
  23. } else if (skip2 > 0) {
  24. --skip2;
  25. --len2;
  26. } else {
  27. break;
  28. }
  29. }
  30. if (len1 >= 0 && len2 >= 0) {
  31. if (S.charAt(len1) != T.charAt(len2)) {
  32. return false;
  33. }
  34. } else {
  35. if (len1 >= 0 || len2 >= 0) {
  36. return false;
  37. }
  38. }
  39. --len1;
  40. --len2;
  41. }
  42. return true;
  43. }
  44. }