字符串含有字符各不相同

6 篇文章 0 订阅


                                     字符串的字符各不相同

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

  
public boolean checkDifferent(String iniString) {   
return !iniString.matches(".*(.)(.*\\1).*");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值