zoukankan      html  css  js  c++  java
  • 元宵节后第一发(数据决定程序结构)

    放假回家好久没写代码了

    题目描述
    实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
    给定一个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     }
  • 相关阅读:
    c# 设计模式 之:装饰模式
    c# 设计模式 之:抽象工厂
    c# 设计模式 之:简单工厂、工厂方法、抽象工厂之小结、区别
    c# 设计模式 之:工厂模式之---工厂模式
    c# 设计模式 之:工厂模式之---简单工厂
    uml
    ASP.NET应用程序生命周期
    C语言可变参数个数
    软件开发过程中的视角
    UML类图与类的关系详解
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/5209321.html
Copyright © 2011-2022 走看看