zoukankan      html  css  js  c++  java
  • 1.判断字符串中的字符是否Unique

        最近开始研究《Cracking the Coding Interview》一书,其实就是美版的IT面试宝典。但是细细品读下来,感觉其质量要优于国内的许多同类书籍。言简意赅,不拖泥带水,作者希望引导读者如果循序渐进思考、提高个人技能。
      有感于自己之前实习面试的挫折经历,发现对很多知识点理解都很浅,借此机会夯实下基础,以便迎接之后找工作大业......
    Question1. Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structure?

    本题应该是非常简单的,关键能否想到巧借字符的ASCII值解题。话说代码是程序员最好的沟通语言,因此直接上Code:
    View Code
    int isUniqueCh1(char * str)
    {
        int i,j;
    
        int n = strlen(str);   /* 输入字符串的长度 */
        int value;
    
        for(i = 0; i< n-1; i++)
        {
            for(j = n-1; j > i; j--)
            {
                value = *(str+i) - *(str+j);  /* 两个字符ASCII码相减为0判断相等 */
                if( value == 0 )
                {
                    return 0;    /* Not Unique */
                }
    
            }
        }
        return 1;  /* Unique */

    这是我自己想到的方法,利用两层循环,两个指针遍历判断字符ASCII值差是否为0。但是看了作者答案之后,发现更妙:

    View Code
    int isUniqueCh2(char* str)
    {
        int n = strlen(str);
        int i;
        int value;         /* 保存相应字符的ASCII码值 */
        int checker = 0;
        for( i = 0; i < n; i++)
        {
            value = *(str+i) - 'a';
    
            if((checker & (1 << value)) > 0)
            {
                return 0;  /* Not Unique */
            }
            checker |= 1 << value;
        }
    
        return 1;  /* Unique */
    
    }

    作者答案利用了位运算。但是最精妙的在与将字符串与一串二进制数对应起来。思想就自己看代码理解了,相信很容易看懂的:)。注:作者都是用Java写的,我改用C实现了,其实大同小异。

      这边废话几句,作者在本书开头提到希望能使用Java或者C#等OO语言写代码,因为其比较直观,这样有C++背景的面试官也容易理解,但这就见仁见智了,能来面试别人的哪个没几把刷子。而这些人一般都精通几门语言,所以感觉自己哪种语言用的熟,更能实现自己意图就用哪个吧,面试官考察的是解题思路,只要能将思路、算法表述清楚就OK了。

    作者实现代码:

    View Code
    public static boolean isUniqueChars2(String str) {
            boolean[] char_set = new boolean[256];
            for (int i = 0; i < str.length(); i++) {
                int val = str.charAt(i);
                if (char_set[val]) return false;
                char_set[val] = true;
            }
            return true;
        }

    以上为个人看后的见解,有不足之处欢迎拍砖,如有更好方法的也欢迎讨论共勉!

    数据库不平,何以平天下,啊啊啊~
  • 相关阅读:
    微信小程序开发工具初始化代码仓库
    微信小程序开发如何初始化远程仓库并 PUSH
    Git 提示用户密码错误如何修改
    MariaDB 在创建外键的时候提示 1005 错误
    Fiddler实现移动端手机抓包
    Windows 安装 Go语言开发环境以及使用
    laravel队列,事件简单使用方法
    视图
    laravel Passport
    多台服务器 同时部署一套代码
  • 原文地址:https://www.cnblogs.com/hackergodness/p/2580539.html
Copyright © 2011-2022 走看看