字符串的字符各不相同
前一段,看到一个问题是一个字符串的所有字符都各不相同。在这里给出几种常见的解法。
首先,最容易想到的就是一个桶排序的算法。直接给出字符串所有可能出现的字符的个数个桶,然后遍历字符串,没个字符出现一次就给相应的桶内数字加一。最后统计看有没有桶的数字是超过1的就可以知道结果了。
然后,我们还可以直接遍历字符串,每次遍历到一个字符我们就从头开始遍历,然后如果发现前面的字符有出现过相同的,那我们直接返回结果可以了。如果没有出现相同的就接着遍历下一个就好了。
接下来,我们考虑一下我们可以对字符串本身进行排序,然后遍历字符串如果连续的字符有相同的我们就直接可以返回结果了。如果没有我们就同样知道结果了。
最后,我们考虑一下,这个字符是什么样的字符,如果是一个ACSII码字符的话,那我们知道ACSII码字符一共就256个,如果这个字符串有257的长度的话,那么可以肯定这个字符串是不可能字符各不相同的。原因很简单就是只有256个字符啊!所以对于前面的几种解法我们都可以直接遍历N个字符,如果总长度大于256就可以直接返回结果了。同样对于UNicode也是一样的。可以看一下抽屉原理。
最后 补上一个正则表达的匹配,我并没有看懂,有明白的大神可以补充一下解释!
public boolean checkDifferent(String iniString) {
return !iniString.matches(".*(.)(.*\\1).*");
}