首页 > 试题广场 >

给定一个包含大小写字母,数字,运算符的字符串,要求设计一次遍

[问答题]
给定一个包含大小写字母,数字,运算符的字符串,要求设计一次遍历,空间复杂度为o(1) 的算法,使得大写字母在一起,小写字母在一起,数字在一起,运算符在一起。
什么叫空间复杂度为o(1)  还有  时间复杂度为o(1)  怎么样判时间复杂度   求解   给链接 也可  一直搞不懂怎么求 
发表于 2017-12-28 12:07:37 回复(0)
这题好久没人答了,这思路对不对?
发表于 2017-03-01 10:40:02 回复(0)
按ASCII码排序
发表于 2015-05-04 16:34:31 回复(0)
利用hash表,表长256,然后统计每个键值出现的次数,然后按次序输出
发表于 2015-08-19 16:27:56 回复(0)
JD9头像 JD9
 var str = "ABCdeaadsa12348dA D/+";
  var reUp = new RegExp(/^[A-Z]+$/);
  var reDown = new RegExp(/^[a-z]+$/);
  var reNum =  new RegExp(/^[0-9]+$/);
  var strUpperCase = new Array();
  var strDownCase  = new Array();
  var strNum =  new Array();
  var strOther = new Array();
  var newStr = new Array();
  for(var i = 0; i < str.length; i++) {
    if(reUp.test(str[i])) { 
      // strUpperCase.splice(i, 0, str[i]);
      strUpperCase.push(str[i]);
      console.log(strUpperCase);
    } 
    else if(reDown.test(str[i])) {  
      // strDownCase.splice(i, 0, str[i]);
      strDownCase.push(str[i]);
      console.log(strDownCase);
    } 
    else if(reNum.test(str[i])) { 
      // strNum.splice(i, 0, str[i]);
      strNum.push(str[i]);
      console.log(strNum);
    } 
    else {
      // strOther.splice(i, 0 , str[i]);
      strOther.push(str[i]);
    }
  }
  strOther.concat(strUpperCase, strDownCase, strNum);

发表于 2017-04-08 15:29:40 回复(0)
题目要求的是空间复杂度,并不是时间复杂度
发表于 2015-09-03 15:30:22 回复(1)
题目中只是说使得大写字母在一起,小写字母在一起,数字在一起,运算符在一起。而且还只能一次遍历,楼下有说排序的,应该没有一次遍历就能成功的吧。

可以建立4个数组,分别存这4组。
发表于 2015-08-20 14:50:54 回复(1)

 1 #include <stdio.h>                                                                                                                                                                   
  2 #include <stdlib.h>
  3 #include <string.h>
  4 
  5 void swap(char *i, char *j) {
  6     if (i == j)
  7         return;
  8     *i = *i + *j;
  9     *j = *i - *j;
 10    *i = *i - *j;
 11 }
 12 
 13 int insertPos(char c ) {
 14     if (c > '~' || c < '!') {
 15         return -1; // invalid char
 16     } else if (c >= '0' && c <= '9') {
 17         return 1;  // digital
 18     } else if (c >= 'A' && c <= 'Z') {
 19         return 2;  // Capital
 20     } else if (c >= 'a' && c <= 'z') {
 21         return 3;  // lowercase
 22     } else {
 23         return 0;  // notations
 24     }
 25 }
 26 
 27 void sortOutChars(char *str) {
 28    int len = strlen(str);
 29    int d1 = 0;
 30    int c1 = 0;
 31    int Cap1 = 0;
 32    for (int i = 0; i < len; i ++) {
 33        switch(insertPos(str[i])) {
 34            case 0 :
 35                if (d1 != c1) {
 36                    swap(str + i, str + d1);
 37                }
 38                d1 ++;
 39            case 1 :
 40                if (c1 != Cap1) {
 41                    swap(str + i, str + c1);
 42                }
 43                c1 ++;
 44            case 2 :
 45                if (Cap1 != i) {
 46                    swap(str + i, str + Cap1);
 47                }
 48                Cap1 ++;
 49            case 3 :
 50                break;
 51            default :
 52                printf("Error: invalid char \' \\ %d \'\n", str[i]);
 53                exit(0);
 54        }
 55    }
 56 }

发表于 2015-01-05 15:22:21 回复(1)