Skip to content

Latest commit

 

History

History
126 lines (107 loc) · 2.43 KB

125.验证回文串.md

File metadata and controls

126 lines (107 loc) · 2.43 KB

125. 验证回文串

url

题目

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

说明:本题中,我们将空字符串定义为有效的回文串。

输入: "A man, a plan, a canal: Panama"
输出: true
输入: "race a car"
输出: false

方法

双指针

  • 起始一个指针l,末尾一个指针r
  • 判断条件:
    1. 回文串
    2. 只考虑字母和数字字符
    3. 将空字符串定义为有效的回文串

code

js

let isPalindrome = s => {
    let isNormalChar = a => {
        return (a >= 'a' && a <= 'z')
            || (a >= 'A' && a <= 'Z')
            || (a >= '0' && a <= '9')
    }
    if (s === "") return true;
    let l = 0, r = s.length - 1;
    s = s.toLowerCase()
    while (l <= r) {
        if (s[l] === s[r]) {
            l++;
            r--;
        } else if (!isNormalChar(s[l])) {
            l++;
        } else if (!isNormalChar(s[r])) {
            r--;
        } else {
            return false;
        }
    }
    return true;
}
console.log(isPalindrome("A man, a plan, a canal: Panama"));
console.log(isPalindrome("race a car"));

go

func isPalindrome1(s string) bool {
	isNormalChar := func (a uint8) bool {
		if a >= 48 && a <= 57 {
		return true
	} else if a >= 65 && a <= 97 {
		return true
	} else if a >= 90 && a <= 122{
		return true
	}
		return false
	}
	if s == "" {
		return true
	}
	s = strings.ToLower(s)
	l, r := 0, len(s) - 1
	for l <= r {
		if s[l] == s[r] {
			l++
			r--
		} else if !isNormalChar(s[l]) {
			l++
		} else if !isNormalChar(s[r]) {
			r--
		} else {
			return false
		}
	}
	return true
}

java

class Solution {
    public boolean isPalindrome(String s) {
        if (s.equals("")) return true;
        s = s.toLowerCase();
        char[] sChar = s.toCharArray();
        int l = 0, r = sChar.length - 1;
        while (l <= r) {
            if (sChar[l] == sChar[r]) {
                l++;
                r--;
            } else if (!isNormalChar(sChar[l])) {
                l++;
            } else if (!isNormalChar(sChar[r])) {
                r--;
            } else {
                return false;
            }
        }
        return true;
    }
    private boolean isNormalChar(char a){
        return Character.isLowerCase(a) || Character.isUpperCase(a) || Character.isDigit(a);
    }
}