首页 > 试题广场 >

找出字符串中第一个只出现一次的字符

[编程题]找出字符串中第一个只出现一次的字符
  • 热度指数:212274 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
找出字符串中第一个只出现一次的字符


数据范围:输入的字符串长度满足



输入描述:

输入一个非空字符串



输出描述:

输出第一个只出现一次的字符,如果不存在输出-1

示例1

输入

asdfasdfo

输出

o
直接遍历这个字符串,并且同时满足这个字符前面的子字符串和后面的子串都不包含这个字符时结束遍历。
import java.util.*;
import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader bu = new BufferedReader(new InputStreamReader(System.in)  );
        // 注意 hasNext 和 hasNextLine 的区别
        String b = bu.readLine();
        String[] arr = b.split("");
        for(int i=0;i<arr.length;i++){
            if(!b.substring(i+1).contains(arr[i]) && !b.substring(0,i).contains(arr[i])){
                System.out.println(arr[i]);
                break;
            }
            if(i==arr.length-1){
                System.out.println(-1);
            }
            
        }

    }
}


发表于 2024-11-03 19:07:09 回复(0)
借鉴别的思路重写了一下,不适使用map来统计次数,但还是需要额外的空间
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.Set;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 用repeat来存储已经被判断为重复重现的字符,后续再遇到该字符直接跳过
        String inputStr = in.nextLine();
        StringBuilder repeat = new StringBuilder();
        for (int i = 0; i < inputStr.length(); i++) {
            // 如果该字符没有被判断过重复出现  且  最后一次出现的位置和当前位置相同,说明只出现了一次
            if (!repeat.toString().contains(Character.toString(inputStr.charAt(i)))
                    && i == inputStr.lastIndexOf(inputStr.charAt(i))) {
                System.out.println(inputStr.charAt(i));
                return;
            } else {
                repeat.append(inputStr.charAt(i));
            }
        }
        System.out.println(-1);
    }
}



发表于 2024-10-29 10:55:48 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String res = null;
        for (int i = 0; i < str.length(); i++) {
            if (str.indexOf(str.charAt(i)) == str.lastIndexOf(str.charAt(i))) {
                res = String.valueOf(str.charAt(i));
                break;
            }
        }
        System.out.println(res == null ? -1 : res);
    }
}

发表于 2024-10-07 15:56:10 回复(0)
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (map.get(c) == 1) {
                System.out.println(c);
                return;
            }
        }
        System.out.println(-1);
    }
}

发表于 2024-07-07 17:05:55 回复(2)
其实不难,方法很多的
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();
        HashMap<Character, Integer> map = new HashMap<>();
        // select the first character only appears once
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
            if (map.get(c) == 1) {
                System.out.println(c);
                return;
            }
        }
        System.out.println("-1");

    }
}


发表于 2024-06-23 10:29:36 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String aa = in.nextLine();
        String dd = "";
        for (int i = 0; i < aa.length(); i++) {
            char cc = aa.charAt(i);
            if (aa.indexOf(cc) == aa.lastIndexOf(cc)) {
                dd = cc + "";
                System.out.println(dd);
                break;
            }
        }
        if (dd.equals("")) {
                System.out.println(-1);
            }
    }
}
发表于 2024-06-06 15:57:19 回复(0)

import java.util.Arrays;
import java.util.Scanner;
import java.util.TreeMap;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String st=in.nextLine();
        int len=st.length();
        for(int i=0;i<st.length();i++){
            char cha=st.charAt(i);
            int shou=st.indexOf(cha);
            int wei=st.lastIndexOf(cha);
           
            if(shou==wei){
                System.out.print(st.charAt(shou));
                break;
            }else{
                if(i==st.length()-1){
                System.out.print(-1);
                }else{
                    continue;
                }
            }
           
        }
       
       
       
       


       
       
       

    }
   

}
编辑于 2024-04-01 12:15:09 回复(0)
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * @ClassName HJ59
 * @Description TODO
 * @Author 21916
 * @Date 2024/2/17 16:45
 */

public class Main {
    public static void main(String[] args) {
        boolean flag=false;
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
           String s = sc.nextLine();
           Map<Character,Integer> map = new LinkedHashMap<Character,Integer>();
           char[] chars =  s.toCharArray();
           for(int i=0;i<s.length();i++){
               if(map.containsKey(chars[i])) {
                   Integer value = map.get(chars[i]);
                   // 检查value是否为null
                   if (value != null) {
                       // 对value进行加一操作
                       value = value + 1;
                       // 更新Map中key对应的value
                       map.put(chars[i], value);
                       //  System.out.println(map.get(chars[i]));
                   }
               }
               else{
                   map.put(chars[i],1);
               }
           }
            for (Map.Entry<Character, Integer> entry : map.entrySet()) {
                if(entry.getValue()==1){
                    System.out.println(entry.getKey());
                    flag=true;
                    break;
                }
            }
            if(flag==false){
                System.out.println(-1);
            }

        }

    }
}

发表于 2024-02-17 20:44:03 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String tmp = str;
        String res = null;
        while(tmp.length() != 0){
            String tp = String.valueOf(tmp.charAt(0));
            String st = tmp.replaceAll(tp, "");
            if(tmp.length()-st.length()==1){
                res = tp;
                break;
            }else{
                tmp = st;
            }
        }
        if(res==null){
            System.out.println("-1");
        }else{
            System.out.println(res);
        }
    }
}

发表于 2023-10-29 22:36:15 回复(0)
import java.util.Scanner;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        if (in.hasNext()) {
            String inString = in.next();
            for (int i = 0; i < inString.length(); i++) {
                char a = inString.charAt(i);
                if (inString.lastIndexOf(a) == inString.indexOf(a)) {
                    System.out.println(a);
                    return;
                }
            }
            System.out.println("-1");
        }
    }
}


发表于 2023-09-07 10:08:28 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] ch=sc.nextLine().toCharArray();
        Map<Character,Integer> map=new LinkedHashMap<>();
        for(int i=0;i<ch.length;i++){
            if(!map.containsKey(ch[i])){
                map.put(ch[i],1);
            }else{
                map.put(ch[i],map.get(ch[i])+1);
            }
        }
        Set entrySet=map.entrySet();
        Iterator it=entrySet.iterator();
        int time=0;
        while(it.hasNext()){
            Map.Entry entry=(Map.Entry)it.next();
            if((Integer)entry.getValue()==1){
                Character key=(Character)entry.getKey();
                time++;
                System.out.println(key);
                break;
            }
        }
        if(time==0){
            System.out.println(-1);
        }
    }
}

发表于 2023-07-15 18:49:18 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str = in.nextLine();
        System.out.println(funHJ59(str));
    }
    public static String funHJ59(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (str.length() - str.replace(str.charAt(i) + "", "").length() == 1) {
                return str.charAt(i) + "";
            }
        }
        return "-1";
    }
}
发表于 2023-06-17 22:17:51 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str=in.nextLine();
        //去重后的集合
        ArrayList<Character> list1=new ArrayList<>();
        //重复的元素集合
        ArrayList<Character> list2=new ArrayList<>();
        for(int i=0;i<str.length();i++){
            if(!list1.contains(str.charAt(i))){
                list1.add(str.charAt(i));
            }else{
                list2.add(str.charAt(i));
            }
        }
        for(int i=0;i<str.length();i++){
            if(!list2.contains(str.charAt(i))){
                System.out.print(str.charAt(i));
                return;
            }
        }
        System.out.print(-1);
    }
}

发表于 2023-06-02 17:11:07 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String a = in.next();
        Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
        for (int i = 0; i < a.length(); i++) {
            map.put(a.charAt(i), map.getOrDefault(a.charAt(i), 0) + 1);
        }
        StringBuffer sub2 = new StringBuffer();
        map.forEach((key, val)-> {
            if (val == 1) {
                sub2.append(key);
            }
        });
        if (sub2.length() > 0) {
            System.out.println(sub2.substring(0, 1));
        } else {
            System.out.println(-1);
        }
    }
}

发表于 2023-06-01 15:56:32 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        Map<Character, Integer> map = new HashMap<>();
        char[] chs = str.toCharArray();
        for(char ch : chs){
            int count = map.getOrDefault(ch,0)+1;
            map.put(ch,count);
        }
        for(char ch : chs){
            if(map.get(ch) == 1){
                System.out.println(ch);
                return;
            }
        }
        System.out.println(-1);
    }
}

发表于 2023-04-24 19:33:58 回复(0)
 Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String a = in.next();
            char[] chars = a.toCharArray();
            Map<Character, Integer> map = new HashMap<Character, Integer>();
            for (int i = 0; i < chars.length; i++) {
                if (map.containsKey(chars[i])) {
                    map.put(chars[i], 1 + map.get(chars[i]));
                } else {
                    map.put(chars[i], 1);
                }
            }
            Character c = null;
            TreeMap<Integer, Character> treeMap = new TreeMap<Integer, Character>();
            for (int i = 0; i < chars.length; i++) {
                for (Map.Entry<Character, Integer> entrySet : map.entrySet()) {
                    if (entrySet.getKey() == chars[i] && entrySet.getValue() == 1) {
                        c = chars[i];
                        treeMap.put(i, c);
                    }
                }
            }
            if (c != null) {
                System.out.println(treeMap.firstEntry().getValue());

            } else {
                System.out.println(-1);
            }

        }
发表于 2023-04-12 22:10:09 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s =in.nextLine();
       
          for(int i=0;i<s.length();i++){
            if(i==s.length()-1 && s.indexOf(s.charAt(i)) != s.lastIndexOf(s.charAt(i))){System.out.println(-1);break;}
            if(s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))){
                System.out.println(s.charAt(i));
                break;}
            }
    }
}
发表于 2023-03-21 12:36:21 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            char[] arr=str.toCharArray();
            int length=str.length();
            for(int i=0;i<str.length();i++){
                String str1=str.replace(String.valueOf(arr[i]),"");
                if(str1.length()+1==length){
                    System.out.println(arr[i]);
                    break;
                }else if(str1.length()+2==length){
                    if(i==str.length()-1){
                        System.out.println(-1);
                    }
                    continue;

                }
            }
        }
    }
}

发表于 2023-02-28 19:49:54 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char d = ' ';
        for (char c : str.toCharArray()) {
            if (str.length() - str.replaceAll(c + "", "").length() == 1) {
                d = c;
                break;
            }
        }
        // 注意这里如果没有+ ""会输出d的ASCII码111
        System.out.println(d == ' ' ? -1 : d + "");
    }
}

发表于 2023-02-27 11:32:56 回复(0)