php旅游类网站开发,个人养老保险12000元,最美情侣免费播放视频大全,做电影网站详细教程1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure? 这道题让我们判断一个字符串中是否有重复的字符#xff0c;要求不用特殊的数据结构#xff0c;这里应该是指哈希表之类的不让用。像普… 1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure? 这道题让我们判断一个字符串中是否有重复的字符要求不用特殊的数据结构这里应该是指哈希表之类的不让用。像普通的整型数组应该还是能用的这道题的小技巧就是用整型数组来代替哈希表在之前Bitwise AND of Numbers Range 数字范围位相与的解法二中也用到过这种方法。由于ASCII表里的基本表共有128个字符也就是可以用键盘表示出来的整个表共有256个字符所以我们只要用一个大小为256的整型数组就可以包含所有的字符我们遍历输入字符串对每一个字符都存入到相应位置并赋值1如果遇到已经为1的说明之前出现过该字符返回false如果遍历完s则返回true代码如下: class Solution {
public:bool isUniqueChar(string s) {if (s.size() 128) return false;int m[256] {0};for (int i 0; i s.size(); i) {if (m[s[i]] 0) return false;m[s[i]] 1;}return true;}
}; 书上还给了另一种解法是用位操作 Bit Manipulation但是这种解法只有当输入字符串是由小写字母组成的才成立因为小写字母只有26个不超过整型int的32位对于每个字母我们将对应位置设为1然后看之前是否是1是的话返回false不是的话设为1。跟上面的方法核心是一样的只不过空间上省了很多但是也对输入做了更为严格的限制代码如下 // Only works when s consists of lower-case letters a-z
class Solution {
public:bool isUniqueChar(string s) {int m 0;for (int i 0; i s.size(); i) {int d s[i] - a;if (m (1 d) 0) return false;m | (1 d);}return true;}
};