【编程练习题】实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理。

在编写算法之前,要先确认是ascii字符串还是unicode字符串

Ascii码表最多就256个字符:以一个字节来存放一个 ASCII 字符 1byte = 8bit ,故最多能存放2^8 = 256个字符

标准ASCII码: 7 位编码,多余出来的一位(最高位)在计算机内部通常保持为 0 (在数据传输时可用作奇偶校验位)。共128个字符

031127(33)控制字符或通信专用字符(其余为可显示字符)

32126(95)字符(32是空格),

        其中485709十个阿拉伯数字

        65~9026个大写英文字母,

        97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

扩展 ASCII 码: 使用8位编码,共256个字符

思路:

1. 不相同的ascii字符最多有256个,故设置bool型数组char_set,包含256个元素,初始为false

2. 依次获取字符串中的字符 转为int值,将该int值作为bool型数组的下标,查看是否为true,if ( char_set[i] )

    若是 则表示已有相同的值 即相同字符,return false;

    若否 则将对应的值设为true即char_set[i] = true;

 代码实现如下:

bool isUniqueChars(string str)
{
    //ascii码表总共就256个字符,如果长度大于256就直接回false
    if (str.length() > 256) return false;
     
    //一个个字符取过去,每取一个就比较一次,若之前没有过,则将该位值置为true.
    bool[] char_Set = new bool[256]; //默认为false
    for (int i = 0; i < str.length; i++)
    {
        int val = str[i]; //获取某个字符,赋值给int类型强转为int值
        if (char_Set[val])
        {
            return false;
        }
        char_Set[val] = true; //表示未得到相同值的字符,将数组value设为true
    }
}

 

你可能感兴趣的:(面试编程题,C/C++)