牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。
但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。
输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母('a' - 'z')
输出一个字符串,表示满足牛牛要求的字符串
banana
ban
#include "stdio.h"
#include "stdlib.h"
char *a(char *str)
{
int x[128] = {0};
int len = strlen(str);
int i;
// 计算出每个符号出现的次数
for(i = 0; i < len; i++)
{
x[str[i]] += 1;
}
// 现在i 指向最后一个元素
while(i >= 0)
{
if(x[str[i]] > 1) // 表示该字符重复出现过
{
// 执行删除操作,将后面的字符串给复制到前面来
// printf("%s\n", str);
x[str[i]] -= 1;
str[i] = 0;
strcat(str, str + i + 1);
}
i--;
}
return str;
}
int main()
{
char str[100000] = {0};
fgets(str, 100000, stdin);
char *p = str;
p = a(str);
printf("%s\n", p);
} import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
if (!map.containsKey(str.charAt(i))) {
System.out.print(str.charAt(i));
map.put(str.charAt(i),1);
}
}
System.out.println();
}
}