题解 | #提取不重复的整数#
提取不重复的整数
https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String str = in.nextLine();
StringBuilder builder = new StringBuilder();
for(int i=str.length()-1;i>=0;i--){
char a = str.charAt(i);
if(str.lastIndexOf(a)==i){
builder.append(a);
}
}
System.out.println(builder.toString());
}
}
}
核心思路:倒序遍历字符串,遇到重复的跳过即可,如果某个字符出现的位置(charAt(index))就是他在字符串中最后一次出现
(lastCharAt(char))的位置则该字符是唯一的,否则重复;
for(int i=str.length()-1;i>=0;i--){
char a = str.charAt(i);
if(str.lastIndexOf(a)==i){
builder.append(a);
}
}
举个例子:输入987663
loop1
int i = str.length()-1 = 5
str.charAt(5) = '3'
str.lastIndexOf('3') = 5
i==str.lastIndexOf('3'),倒数第一个字符5唯一
loop2
int i = i-- = 4
str.charAt(4) = '6'
str.lastIndexOf('6') = 4
i==str.lastIndexOf('6'),倒数第二个字符6唯一
loop3
int i = i-- = 3
str.charAt(3) = '6'
str.lastIndexOf('6') = 4
i!=str.lastIndexOf('6'),倒数第三个字符6不唯一
在第三次循环的时候发现6出现的位置和6最后一次出现的位置不一样,说明这个6是重复的了,跳过即可,按照该循环可以输出符合题目的答案
查看3道真题和解析