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

Algorithm 是唯一的:实现一个算法来确定字符串是否具有所有唯一的字符,algorithm,Algorithm,Ch01_Q01:1.1是唯一的:实现一个算法来确定字符串 具有所有唯一字符。 这里我们假设它是一个ASCII字符串 来自,破解编码采访,第6版 第一章。数组和字符串私有静态布尔值isStringUnique(字符串s){ private static boolean isStringUnique(String s) { // ASCII has only 128 unique characters if (s.length() > 128) { retur

Ch01_Q01:1.1是唯一的:实现一个算法来确定字符串 具有所有唯一字符。

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

来自,破解编码采访,第6版 第一章。数组和字符串

私有静态布尔值isStringUnique(字符串s){
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;
}
//ASCII只有128个唯一字符 如果(s.长度()>128){ 返回false; } int[]aCharSet=新int[128]; 对于(int i=0;i0){ 返回false; }否则{ aCharSet[值]+; } } 返回true; }
这里还有一些您可能会觉得有用的实现。第一个是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
bool是唯一的(const std::string&s){
如果(s.size()>128)
返回false;
std::可见阵列;
可见。填充(假);
用于(字符n:s){
电流=n;
如果(见[当前]){
返回false;
}否则{
可见[当前]=真实;
}
}
返回true;
}
def是唯一的(字符串):
如果len(字符串)==len(设置(字符串)):
返回真值
其他:
返回错误
def_是唯一的(字符串):
如果len(字符串)>128:
返回错误
seen=[False]*128
对于字符串中的元素:
当前=字符串索引(elem)
如果看到[当前]:
返回错误
其他:
可见[当前]=真
返回真值
def final_是唯一的(str):
如果len(str)>128:
返回错误
seen=[False]*128
对于str中的元素:
电流=ord(元素)
如果看到[当前]:
返回错误
其他:
可见[当前]=真
返回真值

问题是什么?提示:使用Hashmap。他们有一个带解决方案的github。但是我脑子里的一些想法是将它们添加到集合或其他数据类型中,这样可以轻松地利用它的属性来检测重复。如果内存有限,可以进行就地排序,然后线性遍历排序后的数据,并比较相邻数据的唯一性。在这里查看完整的解决方案: