牛牛有一个由小写字母组成的字符串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(); } }