《程序员面试金典》刷题(一)

这些东西就是套路

1.实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = "leetcode"
输出: false
示例 2:

输入: s = "abc"
输出: true
限制:

0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分

总结套路:标准答案是位运算,这块不懂,仔细研究了下还挺意思。

位预算:&和|两种,&就是两个数都是1,结果才的1。 |就是只要有一个是1,就是1。

左移位预算: 15<<2 表示将15转化为二进制,然后左移两位,右侧末尾全部补0。

典型应用场景:位运算主要是用来表示一组具有开关状态的事物,开关指的就是true/false,开或者关等。

比如5个灯泡,00000

第一个灯泡是d1,00001,2

第二个是d2,00010,4

一组灯泡的状态是一个变化的值,比如10110

如果想知道第三个灯泡亮不亮,可以用00100跟他做&运算。


memory应该是 00000000000000000000000000000

其他两种思路是

1.查找字符,返回的结果不是自己所在的位置,就是不重复。

从第一个字符开始,查找一个字符 astr.lastIndexOf(),是此位置就不重复,否则就重复。

for(i=0;i<astr.length();i++)

astr.lastIndexOf(astr.charAt(i)  )!=i

return false

return true;

2.利用set集合的不重复特性

原文地址:https://www.cnblogs.com/gen2122/p/14861653.html