题目
www.nowcoder.com/practice/[2…](www.nowcoder.com/practice/25…)
我的题解
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
List<Character> list = new ArrayList<>();
StringBuffer sb = new StringBuffer();
while ((str = bf.readLine()) != null) {
char[] arr = str.toCharArray();
for (int i = arr.length - 1; i >= 0; i--) {
if (list.contains(arr[i])) {
continue;
}
list.add(arr[i]);
sb.append(arr[i]);
}
System.out.println(sb);
}
}
}
思路:
1、 list.contains 做重复校验、 StringBuffer 拼接取到的值
2、还是类似递归那个思想、终止条件+终止行为+重复行为
3、List<Character> list = new ArrayList<>(); list可以放Character
参考题解:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bf.readLine()) != null) {
char[] chars = str.toCharArray();
LinkedHashSet<Character> set = new LinkedHashSet<>();
for (int i = chars.length - 1; i >= 0; i--) {
set.add(chars[i]);
}
String s = "";
Iterator<Character> it = set.iterator();
while (it.hasNext()) {
s += it.next();
}
System.out.println(s);
}
}
}
总结:
1、LinkedHashSet<Character> set = new LinkedHashSet<>(); LinkedHashSet就是有序唯一
2、 迭代器循环set、回头需要巩固集合的各种循环
Iterator<Character> it = set.iterator();
while (it.hasNext()) {
s += it.next();
}
3、 对比一下StringBuilder 、 StringBuffer 和 String的+ 的性能、在几个字符串拼接的时候看起来差别不大
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bf.readLine()) != null) {
char[] chars = str.toCharArray();
LinkedHashSet<Character> set = new LinkedHashSet<>();
for (int i = chars.length - 1; i >= 0; i--) {
set.add(chars[i]);
}
StringBuffer sb = new StringBuffer();
Iterator<Character> it = set.iterator();
while (it.hasNext()) {
sb.append(it.next());
}
System.out.println(sb);
}
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bf.readLine()) != null) {
char[] chars = str.toCharArray();
LinkedHashSet<Character> set = new LinkedHashSet<>();
for (int i = chars.length - 1; i >= 0; i--) {
set.add(chars[i]);
}
StringBuilder sb = new StringBuilder();
Iterator<Character> it = set.iterator();
while (it.hasNext()) {
sb.append(it.next());
}
System.out.println(sb);
}
}
}
高效题解
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws Exception {
InputStream in = System.in;
int available = in.available()-1;
char[] chars = new char[available];
while (available-- > 0) {
chars[available] = (char) in.read();
}
StringBuilder resul = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if (resul.lastIndexOf(String.valueOf(chars[i])) != -1){
continue;
}
resul.append(chars[i]);
}
System.out.println(resul.toString());
}
}
总结:
1、 排名说1ms、可是我本地执行也是13ms
2、用了位运算、工作中使用少不花经历去研究