难度

简单

标签

数组

题目描述

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

  1. 输入: s = "leetcode"
  2. 输出: false

示例 2:

  1. 输入: s = "abc"
  2. 输出: true

限制:

0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。

题解

1. 使用set

  1. import java.util.HashSet;
  2. class Solution {
  3. public boolean isUnique(String astr) {
  4. HashSet<Character> set = new HashSet<>();
  5. for(int i = 0; i < astr.length(); i++) {
  6. char cur = astr.charAt(i);
  7. if(set.contains(cur)) {
  8. return false;
  9. }
  10. set.add(cur);
  11. }
  12. return true;
  13. }
  14. }

2. 使用位运算,如果字符串s都是字母。

‘A’的ASCII码是65,小写字母’z’的ASCII码是122,两者相差58,可以用一个long值来存。

  1. class Solution {
  2. public boolean isUnique(String astr) {
  3. long bits = 0;
  4. for(int i = 0; i < astr.length(); i++) {
  5. char cur = astr.charAt(i);
  6. int move = cur - 'A';
  7. long curBit = 1L << move;
  8. if((curBit & bits) != 0) {
  9. return false;
  10. }
  11. bits |= curBit;
  12. }
  13. return true;
  14. }
  15. }