互联网面试题:验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

代码

// 验证回文字符串
func Test7() {
	inputStr := []string{
		"A man, a plan, a canal: Panama",
		"race a car",
	}
	validChar := func(a string, index int) bool {
		if index >= len(a) {
			return false
		}
		if a[index] >= '0' && a[index] <= '9' {
			return true
		}
		if a[index] >= 'a' && a[index] <= 'z' {
			return true
		}
		if a[index] >= 'A' && a[index] <= 'Z' {
			return true
		}

		return false
	}
	charEqual := func(a, b byte) bool {
		if b > a {
			a, b = b, a
		}

		return a == b || a-('a'-'A') == b
	}
	f := func(input string) bool {
		start, end := 0, len(input)-1
		for start < end {
			// 找start
			for !validChar(input, start) && start <= end {
				start++
			}
			// 找end
			for !validChar(input, end) && end >= start {
				end--
			}
			if start == end {
				return true
			}

			if !charEqual(input[start], input[end]) {
				return false
			}
			start++
			end--
		}
		return true
	}
	for i := 0; i < len(inputStr); i++ {
		fmt.Printf("%s %v\n", inputStr[i], f(inputStr[i]))
	}

}


运行结果