跳转至

4030. 判断 ASCII 值回文

题目描述

给你一个由小写英文字母组成的字符串 s

s 中的每个字符替换为其 ASCII 值对应的 8 位二进制表示,包括前导零,并保持字符原有顺序,从而构造一个二进制字符串

如果得到的二进制字符串是一个 回文串 ,则返回 true;否则返回 false

二进制字符串 是指仅由字符 '0''1' 组成的字符串。

回文串 是指正着读和反着读都相同的字符串。

 

示例 1:

输入: s = "ff"

输出: true

解释:

  • 字符 f 的 ASCII 值为 102,其 8 位二进制表示为 01100110
  • 因此,得到的二进制字符串为 0110011001100110
  • 由于该二进制字符串是一个 回文串 ,因此输出为 true

示例 2:

输入: s = "leet"

输出: false

解释:

  • 字符 leet 的 ASCII 值分别为 108、101、101 和 116 。
  • 它们对应的 8 位二进制表示分别为 01101100011001010110010101110100
  • 因此,得到的二进制字符串为 01101100011001010110010101110100
  • 由于该二进制字符串不是一个 回文串 ,因此输出为 false

 

提示:

  • 1 <= s.length <= 100
  • s 仅由小写英文字母组成。

解法

方法一:模拟

我们按照题意,将字符串 \(s\) 中每个字符替换为其 ASCII 值的 \(8\) 位二进制表示(包含前导零),按原顺序拼接得到二进制字符串 \(t\),然后判断 \(t\) 是否为回文串即可。

时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。其中 \(n\) 是字符串 \(s\) 的长度。

1
2
3
4
class Solution:
    def isPalindromic(self, s: str) -> bool:
        t = ''.join(format(ord(c), '08b') for c in s)
        return t == t[::-1]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
    public boolean isPalindromic(String s) {
        StringBuilder t = new StringBuilder();
        for (char c : s.toCharArray()) {
            String b = Integer.toBinaryString(c);
            t.append("0".repeat(8 - b.length())).append(b);
        }
        return t.toString().equals(t.reverse().toString());
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution {
public:
    bool isPalindromic(string s) {
        string t;
        for (unsigned char c : s) {
            for (int i = 7; i >= 0; --i) {
                t += char('0' + ((c >> i) & 1));
            }
        }
        return ranges::equal(t, t | views::reverse);
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
func isPalindromic(s string) bool {
    var t []byte
    for _, c := range []byte(s) {
        for i := 7; i >= 0; i-- {
            t = append(t, '0'+((c>>i)&1))
        }
    }
    for i := range t[:len(t)/2] {
        if t[i] != t[len(t)-1-i] {
            return false
        }
    }
    return true
}
1
2
3
4
function isPalindromic(s: string): boolean {
    const t = [...s].map(c => c.charCodeAt(0).toString(2).padStart(8, '0')).join('');
    return t === [...t].reverse().join('');
}

评论