码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-23 12:47:36      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

放假回家好久没写代码了,来一发牛客网的题.(这个题再次说明我一直强调的问题数据的特性决定了程序结构)

题目描述
实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个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     }

 

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

标签:

原文地址:http://www.cnblogs.com/daimadebanyungong/p/5209321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!