求一个算法 题目如下
函数的目的是输入一个字符串,检测其中是否有相同的字符,若有,返回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)
[解决办法]
#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;