是唯一的:实现算法以确定字符串是否具有所有唯一字符

时间:2017-09-25 00:52:27

标签: algorithm

Ch01_Q01: 1.1是唯一的:实现算法以确定是否为字符串 拥有所有独特的角色。

我们假设这是一个ASCII字符串

From,Cracking the Coding Interview,第6版 第1章数组和字符串

2 个答案:

答案 0 :(得分:0)

private static boolean isStringUnique(String s) {
    // ASCII has only 128 unique characters
    if (s.length() > 128) {
        return false;
    }

    int[] aCharSet = new int[128];

    for (int i = 0; i < s.length(); i++) {
        int value = s.charAt(i);
        if(aCharSet[value] > 0) {
            return false;
        } else {
            aCharSet[value]++;
        }
    }

    return true;
}

答案 1 :(得分:0)

这里有一些您可能会发现有用的实现。第一个是C ++,其余的是python。你上面也有一些很好的提示。在第一个Python实现中,您将看到一个集合。集合是无序集合,不包含重复元素。换句话说,集合包含所有唯一值。

bool is_unique(const std::string& s) {
  if (s.size() > 128)
    return false;

  std::array<bool, 128> seen;
  seen.fill(false);

  for (char n : s) {
    char current = n;
    if (seen[current]) {
      return false;
    } else {
      seen[current] = true;
    }
  }
  return true;
}


def is_unique(string):
    if len(string) == len(set(string)):
        return True
    else:
        return False


def _is_unique(string):
    if len(string) > 128:
        return False

    seen = [False]*128

    for elem in string:
        current = string.index(elem)
        if seen[current]:
            return False
        else:
            seen[current] = True
    return True


def final_is_unique(str):
    if len(str) > 128:
        return False

    seen = [False]*128

    for elem in str:
        current = ord(elem)
        if seen[current]:
            return False
        else:
            seen[current] = True
    return True