数据范围:输入的字符串长度满足 1≤n≤100 且只包含大小写字母,区分大小写。
eg:输入 abcqweracd 输出 abcqwer
原链接:https://www.nowcoder.com/questionTerminal/784efd40ed8e465a84821c8f3970b7b5
import java.util.Scanner;
public class Test {
//方法一
public static String fun1(String str){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char a = str.charAt(i);
if (!sb.toString().contains(a+"")){
//StringBuilder没有contains所以先toString contains参数得是String所以+“”
sb.append(a);
}
}
return sb.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println(fun2(str));
}
}
//方法二(利用Hash思想)
//定义一个整型数组来标记当前字符是否出现过 出现过就将0变为1 继续遍历 出现重复字符 数组内已为1 不打印
public static String fun2(String str){
StringBuilder sb = new StringBuilder();
int[] a = new int[123]; //int[] a = new int[58];
for (int i = 0; i < str.length(); i++) {
char b = str.charAt(i);
if (a[b] == 0){ //if (a[b-65] == 0)
//b虽然是字符但其实背后也是十进制整数表示的 'A'是65 'z'是122 做差为57
sb.append(b);
a[b] = 1;
}
}
return sb.toString();
}
}