01.01. 判定字符是否唯一

  可以说这道简单的面试题让我学到了太多太多的东西了。

  首先这道题是这样的:

  

 

   那么这道看起来容易的“面试题”要考察什么知识点呢?

  我第一时刻想到的是,排序+比较。比较确信自己的思路应该是对的。

     

   易如反掌!通过了。

 

 

   当然想到还可以用元组,但是没想到这个题还有很多其他的东西。例如有人想到用位运算的方法来解决这个题,那么位运算的时间复杂度可以达到On,那真的是相当的强了。

   位运算的思路非常清晰,26个字母,用每个字母和字母a做差,得到一个插值n,那么每个字母就变成1<<n,这样如果没有相同的字母在,那么无论你怎么进行&运算都是0,例如b是01,c是10,&运算后是00.每次位运算判断没有字符相同的时候,我们用|运算来把当前结果加在一起,例如b和c加在一起就是11,下次出现10或者01的时候你做&运算就不会是0了,那就说明出现了重复的字符。

  

 

 

   看起来似乎更强了,但是问题也出现了。这样做合理吗?

  

 

  显然你需要先问清楚输入的内容字符在什么范围内,如果字符的范围不局限于26个字母,那么你需要大于26位的整型大小。也就是说,32位的int可能装不下这个数字。可是在python当中,数字是没有最大值限制的,所以这样做完全可以。

   

posted @ 2021-07-18 17:40  灰人  阅读(40)  评论(0)    收藏  举报