说实话,昨天UC的笔试题基本全是基础,可是太基础,直接致使不少都不能肯定了。看来无论找工做仍是找实习,必定要复习到位。好在我也一直是抱着打酱油的味道,实习与否不是特别在乎,不然真心要鄙视死本身啦。html
好的,言归正传,题目是一道经典的题目:在一个字符串中找到第一个只出现一次的字符。要求算法
一、必须用C/C++编写代码。spa
二、不能使用嵌套的for/while循环。code
看到这道题时,我坑爹的当作不能使用for/while循环了。我当时想的是,要遍历字符串不能使用for/while,除非递归和使用goto语句,不然这几乎是不可能的(若是能够,请点明)。以为题目应该不会这么变态吧,迟迟不肯动笔,后来知道人家说的是嵌套好很差。好的,思路出来了(后来才知道网上一堆这样的题目)。htm
一、暴力求解,复杂度为O(n*n).必然会使用到双循环。否决!blog
二、排序解决,能够。复杂度也下降,各类排序算法见本博博文。各类内部排序算法排序
三、哈希表的方式,不知道为何,我对哈希表的方式情有独钟,不少算法个人第一反应都是哈希。O(∩_∩)O哈哈~。昨天的算法代码以下:递归
四、固然,还有第四种解决方式,用二进制的方式,用两个位表示一个字符,扫描。感受和哈希表的方式差很少。字符串
1 int HT[256]={0}; 2 char getChar(char* str){ 3 assert(str!=NULL); 4 for (int i=0;i<strlen(str);i++) 5 HT[(int)str[i]]++; 6 for(int i=0;i<strlen(str);i++){ 7 if (HT[(int)str[i]]==1) 8 return str[i]; 9 } 10 return NULL; 11 }
看到博文的各路大仙,除了以上四种方式,还有其余什么求解方式,求指点。get
参考文献:真心无
版权全部,欢迎转载,可是转载请注明出处:潇一