元宵节后第一发(数据决定程序结构)

放假回家好久没写代码了

题目描述
实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。
保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。

 

/*
* 解题思路

* 1:可以用位图来做,由于是accii码,所以字符取值范围为0~255,只需建立一个256的整形数组扫描一遍前256个字符然后对字符
* 所对应的整形值+1即可,然后再扫一遍整形数组,有>2的值就返回false,否则返回true(但是本体不允许用额外存储空间)
*
* 2:双重扫描(由于本题不允许有额外的存储空间),但是只要扫描前256个字符即可(鸽巢原理)
*
* 3:排序:如果不限定accii码可以用排序做O(nlogn)的时间复杂度
*
* 其他大神的比较好的思路:
* Parition基于快速排序的partition,可以边排序边找重复,也即是每次partition之后,
* 判断中间key元素与两边元素是否相同,相同则返回false,不同再进行下一轮partition.
* 时间复杂度也是O(nlongn)。
*/

附带双重循环的代码:

 1 public boolean checkDifferent(String iniString) {
 2         // write code here
 3         
 4         
 5         if(iniString == null || iniString.length() <= 0 || iniString.length() > 256)
 6         {
 7             return false;
 8         }
 9         
10         int maxLen = iniString.length() > 256 ? 256 : iniString.length();
11         
12         for(int i = 0; i < maxLen; i++)
13             for(int j = i + 1; j < maxLen; j++)
14             {
15                 if(iniString.charAt(i) == iniString.charAt(j))
16                 {
17                     return false;
18                 }
19             }
20         
21         return true;
22     
23     }

 

posted @ 2016-02-23 11:28  代码的搬运工  阅读(305)  评论(0编辑  收藏  举报