从字符串中“aecbcda”找出不重复的字符组成的顺序子串“aecbd”,用最优的时空复杂度。
答题说明:该题为手动判卷,答案只要写对即可,不用严格满足字符比对。
#include<stdio.h> #include<string.h> main() { char a[100],b[100]; int i,j,len,count=0,flag; gets(a); len=strlen(a); for(i=0;i<len;i++) { flag=1; for(j=i-1;j>=0;j--) if(a[i]==a[j]) { flag=0; break; } if(flag==1) b[count++]=a[i]; } b[count]='\0'; puts(b); }
#include<stdio.h> (737)#include<stdlib.h> #include<string.h> (845)#define STLEN 20 void main(void) { char s[] = "aecbcda"; char res[STLEN]={0}; int n=0; int count=0; int i=0; int flag=0; int len = strlen(s); while(n<len) { flag=0; for(i=0;i<count;i++) { if(res[i]==s[n]) { flag=1; break; } } if(flag==0) { res[count++]=s[n]; } n++; } puts(res); }
#include <stdio.h> #include <string.h> int main() { char str1[20],str2[20]; int i,j,len; int flag; int count=0; gets(str1); len = strlen(str1); for(i=0 ; i<len ; i++) { flag = 1; for(j=0 ; j<i ; j++) { if(str1[j] == str1[i]) { flag = 0; break; } } if(flag == 1) { str2[count++] = str1[i]; } } str2[count] = '\0'; puts(str2); return 0; }
char *slove(const char *str) { char map[256]; char *res = (char *)malloc(256);//排除'\0',因此最多只需255+1 char *p = res; memset(map, 0, 256); while (*str) { if (map[*str] != 0) { map[*str] = 1; *p++ = *str; } str++; } *p = 0; return res; }
#include <iostream> #include <string.h> using namespace std; int main() { int len = 0; char s[100]; unsigned char vis[300]={0}; scanf("%s",&s); len = strlen(s); for(int i=0; i<len; i++) { if(s[i]>='a' && s[i]<='z') { vis[s[i]-'a'] ++; if(vis[s[i]-'a'] <= 1) cout<<s[i]; } else if(s[i]>='A' && s[i]<'Z') { vis[s[i]-'A'] ++; if(vis[s[i]-'A'] <= 1) cout<<s[i]; } } system("pause"); return 0; }
#include<iostream> #include<string> #include<map> using namespace std; int main(){ string s1,s2; map<int,char> ss; getline(cin,s1); ss.insert(pair<int,char>(1,s1[0])); s2+=s1[0]; for(int i=1;i<s1.strlen();i++){ if(!ss.count(ss.second)){ ss.insert(pair<int,char>(1,s1[i])); s2+=s1[i]; } } cout<<s2<<endl; }
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int main() { int Numa = 0, Numb = 0, Numc = 0, Numd = 0, Nume = 0, i = 0, j = 0, count = 0; char strX[] = "aecbcda"; char strY[sizeof(strX)] = ""; for (i = 0; i < sizeof(strX); i++) { if (strX[i] == 'a') { Numa++; if (Numa == 1) { strY[j++] = strX[i]; count++; } } else if (strX[i] == 'b') { Numb++; if (Numb == 1) { strY[j++] = strX[i]; count++; } } else if (strX[i] == 'c') { Numc++; if (Numc == 1) { strY[j++] = strX[i]; count++; } } else if (strX[i] == 'd') { Numd++; if (Numd == 1) { strY[j++] = strX[i]; count++; } } else if (strX[i] == 'e') { Nume++; if (Nume == 1) { strY[j++] = strX[i]; count++; } } } cout << strY << endl; return 0; }
#include <iostream>
using namespace std;
int main()
{
int len = 0;
string str1, str2; cin >> str1;
bool visit[str1.length()] = {flase}; //检查记录字符串中个字母是否重复
for(int i=0;i<str1.length();i++)
{
for(int j=0;j<i;j++)
{
if(visit[j])
break;
}
if(j == i)
{
str2[len] = str1[i]; len++;
}
}
return 0;
}
std::string fun(std::string & str){
std:;string r_str;
r_str.append(1,str[0]);
for (int i = 1; i < str.size(); i++){
int num = 0;
int j = 0;
while (j != r_str.length()){
if (str[i] == r_str[j])
break;
else
num++;
j++;
}
if (num == r_str.length())
r_str.append(1, str[i]);
}
return r_str;
}