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     }
  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/5209321.html
Copyright © 2011-2022 走看看