bug修复 双指针 跳出循环中的循环

 

https://leetcode.cn/problems/backspace-string-compare/

844. Backspace String Compare
Given two strings s and t, return true if they are equal when both are typed into empty text editors. '#' means a backspace character.

Note that after backspacing an empty text, the text will continue empty.



Example 1:

Input: s = "ab#c", t = "ad#c"
Output: true
Explanation: Both s and t become "ac".
Example 2:

Input: s = "ab##", t = "c#d#"
Output: true
Explanation: Both s and t become "".
Example 3:

Input: s = "a#c", t = "b"
Output: false
Explanation: s becomes "c" while t becomes "b".


Constraints:

1 <= s.length, t.length <= 200
s and t only contain lowercase letters and '#' characters.


Follow up: Can you solve it in O(n) time and O(1) space?

 

 

 

func backspaceCompare(s string, t string) bool {
	m, n := len(s), len(t)
	p, q := m-1, n-1
	for p > -1 && q > -1 {
		i := 0
		for p-i > -1 && s[p-i] == '#' {
			i++
		}
		j := 0
		for q-j > -1 && t[q-j] == '#' {
			j++
		}
		p -= 2 * i
		q -= 2 * j

		if p < 0 && q < 0 {
			return true
		}
		if p > -1 && q > -1 && s[p] != t[q] {
			return false
		}
		p--
		q--
	}
	return true
}

 

import "fmt"

func backspaceCompare(s string, t string) bool {
	m, n := len(s), len(t)
	p, q := m-1, n-1
	for p > -1 && q > -1 {
		for {
			i := 0
			for p-i > -1 && s[p-i] == '#' {
				i++
			}

			j := 0
			for q-j > -1 && t[q-j] == '#' {
				j++
			}
			// offset #
			u := 0
			for ii := 0; ii < i; ii++ {
				if p-i-ii > -1 && s[p-i-ii] == '#' {
					u++
				}
			}

			v := 0
			for jj := 0; jj < j; jj++ {
				if q-j-jj > 0 && t[q-j-jj] == '#' {
					v++
				}
			}
			if i+j == 0 {
				break
			}

			p -= 2*i + 2*u // TODO 检查u经过的元素 循环中的循环
			q -= 2*j + 2*v
		}

		if p > -1 && q > -1 {
			if s[p] == t[q] {
				p--
				q--
				continue
			} else {
				fmt.Println("2--")
				return false
			}

		}
		if p == -1 && q == -1 {
			return true
		}
		if (p > -1 && s[p] != '#' && q < 0) || (q > -1 && t[q] != '#' && p < 0) {
			fmt.Println("1--", p, " ", q)

			return false
		}
	}
	return true
}

  

  循环中的循环

跳出

func backspaceCompare(s string, t string) bool {
	skipS, skipT := 0, 0
	i, j := len(s)-1, len(t)-1
	for i >= 0 || j >= 0 {
		for i >= 0 {
			if s[i] == '#' {
				skipS++
				i--
			} else if skipS > 0 {
				skipS--
				i--
			} else {
				break
			}
		}
		for j >= 0 {
			if t[j] == '#' {
				skipT++
				j--
			} else if skipT > 0 {
				skipT--
				j--
			} else {
				break
			}
		}
		if i >= 0 && j >= 0 {
			if s[i] != t[j] {
				return false
			} else {
				i--
				j--
				continue
			}
		} else if i >= 0 || j >= 0 {
			return false
		} else {
			return true
		}
	}
	return true
}

  

 

 

 

 

posted @ 2022-11-14 18:04  papering  阅读(18)  评论(0编辑  收藏  举报