题目描述
请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
正确算法:
1 : 利用hash计数,但是题目不允许额外空间, 所以pass
2 : 字符串排序, 然后从头到尾遍历一遍
(1)遍历前一个和后一个是否相同,如果相同,返回false,否则继续遍历, 遍历结束后,都没有相同的,返回true
(2)利用stl的unique函数
sort(iniString.begin(), iniString.end());
if
(unique(iniString.begin(), iniString.end()) == iniString.end())
return
true
;
else
return
false
;
3 : 评论区某大神的正则表达式方法, 记录下来,后续研究(估计不会再看了吧,2333)
return
!iniString.matches(
".*(.)(.*\\1).*"
);
4 : 还是字符串排序的思想,只不过可以边排边判断,如果相同的话直接返回false。这个是利用快排的思想,直接判断中间key和相邻元素是否相同。
5 : 利用异或性质
双重遍历数组,如果每个元素都没有和它重复的, 就返回true,否则返回false。
char
temp=iniString.charAt(
0
);
int
i=
0
;
for
(i=
1
;i<iniString.length();i++){
if
((temp^iniString.charAt(i))==
0
)
return
false
;
}