首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

算法 题目如下

2012-03-08 
求一个算法 题目如下函数的目的是输入一个字符串,检测其中是否有相同的字符,若有,返回1,没有返回0要求 1.

求一个算法 题目如下
函数的目的是输入一个字符串,检测其中是否有相同的字符,若有,返回1,没有返回0
要求 1.效率最高的
  2.最节省内存的
每个要求分别写一中算法

[解决办法]
1 时间O(n) 空间O(n)hash一下
2 时间O(n^2) 空间O(1)普通比较查找
[解决办法]
可用一个int型数组lastPos[128]记录每一个ASCII码在上一次出现的位置,先初始化为-1。
再遍历字符串str,对于字符c,如果lastPos[c]!=-1,则表示该字母出现过,返回;
如果lastPos[c]==-1,则lastPos[c]=c的下标。
时间复杂度O(n),空间复杂度O(1)
[解决办法]

探讨
可用一个int型数组lastPos[128]记录每一个ASCII码在上一次出现的位置,先初始化为-1。
再遍历字符串str,对于字符c,如果lastPos[c]!=-1,则表示该字母出现过,返回;
如果lastPos[c]==-1,则lastPos[c]=c的下标。
时间复杂度O(n),空间复杂度O(1)

[解决办法]
C/C++ code
#include<stdio.h>#include<string.h>//最节省内存int save_mem(char *str){    while((*str)!='\0')    {        char *p=str+1;        while( (*p)!='\0' )        {            if(*p==*str)                return 1;            p++;        }        str++;    }    return 0;}//效率最高int save_time(char *str){    int map[256];    memset(map,0,sizeof(map));    while(*str)    {        if(map[*str]==1)            return 1;        else            map[*str]=1;        str++;    }    return 0;}int main(){    char *str="test_data";    printf("%d\n",save_time(str));    printf("%d\n",save_mem(str));    return 0;}
[解决办法]
hash
[解决办法]
用bitset,128位搞定。
[解决办法]
将bitset所有位初始化为0,对字符串str遍历,i为字符串下标。如果bitset[str[i]]=1;则返回str[i],否则将bitset[str[i]]=1;
[解决办法]
用for循环呗
[解决办法]
有点像基数排序,令从cnt[300]=0;如果cnt[i]>=2,breakl;

热点排行