题解 | #提取不重复的整数#

提取不重复的整数

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是重复的了,跳过即可,按照该循环可以输出符合题目的答案

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务