zoukankan      html  css  js  c++  java
  • 2016奇虎360研发工程师内推笔试编程题:找到字符串第一个只出现一次的字符

    最后一个字符
    正在挑战一个CrackMe的你,把需要填写的前面几位密码都正确猜出了,可是这最后一位密码,好像藏得有点深。CrackMe的作者还挑衅般的在里面藏了个.tar.gz文件,解压缩出来,里面写道你要的最后一个字符就在下面这个字符串里。这个字符是下面整个字符串中第一个只出现一次的字符。 (比如,串是abaccdeff,那么正确字符就是b了)然而下面给出来的字符串好像太长太长了,单靠人力完全无法找出来。于是,你需要写一个程序代劳了。输入文件体积较大,请使用一些快速的输入输出手段,不推荐使用cin/cout,对Java并不推荐使用Scanner直接读写。 
    输入描述:
    第一行,一个正整数T(T≤20)  ,表示输入数据组数。
    之后T行,每行一个字符串S。( 1≤S 的长度≤10 6 ,保证字符串中出现的字符的ASCII码在[0x21,0x7F)范围内,即均为可显示的非空白符,同时保证一定有解)
    输出描述:
    一共T 行,每行一个字符C ,表示所给的相应字符串中第一个只出现一次的字符。
    输入例子:
    2
    abaccdeff
    testonline
    输出例子:
    b
    s
     解题
    找到一个字符串中第一个只出现一次的字符
    ASCII也就128,定义一个128的数组,如果用HashMap 或者ArrayList 没有必要的
    数组记录各个字符出现的次数,再根据原始字符的顺序找到第一个只出现一次的字符
    使用Scanner
     1 import java.util.Scanner;
     2 
     3 /*
     4  * 找出字符串中第一个只出现一次的字符
     5  * 输出 :N,表示N个字符串
     6  * 下面就是N个字符串,一个字符串单独一行
     7  * 输出:N个字符,一个字符一行
     8  */
     9 public class Main{
    10     public static void main(String[] args){
    11         Scanner in = new Scanner(System.in);
    12         int N = in.nextInt();
    13         for(int i = 0;i<N;i++){
    14             String str = in.next();
    15             FindFirstChar(str);
    16         }
    17     }
    18     public static void FindFirstChar(String str){
    19         int[]  arr = new int[128];
    20         for(int i = 0;i<str.length();i++){
    21             arr[str.charAt(i)]++;
    22         }
    23         for(int i =0;i<str.length();i++){
    24             if(arr[str.charAt(i)] == 1){
    25                 System.out.println(str.charAt(i));
    26                 break;
    27             }
    28         }
    29     }
    30 }

    不使用Scanner

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 import java.util.Scanner;
     5 
     6 /*
     7  * 找出字符串中第一个只出现一次的字符
     8  * 输出 :N,表示N个字符串
     9  * 下面就是N个字符串,一个字符串单独一行
    10  * 输出:N个字符,一个字符一行
    11  */
    12 public class Main{
    13     public static void main(String[] args){
    14          BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    15         int N = 0;
    16         try {
    17             N = Integer.parseInt(in.readLine());
    18         } catch (NumberFormatException | IOException e) {
    19             // TODO Auto-generated catch block
    20             e.printStackTrace();
    21         }
    22         for(int i = 0;i<N;i++){
    23             String str=null;
    24             try {
    25                 str = in.readLine();
    26             } catch (IOException e) {
    27                 // TODO Auto-generated catch block
    28                 e.printStackTrace();
    29             }
    30             FindFirstChar(str);
    31         }
    32     }
    33     public static void FindFirstChar(String str){
    34         int[]  arr = new int[128];
    35         for(int i = 0;i<str.length();i++){
    36             arr[str.charAt(i)]++;
    37         }
    38         for(int i =0;i<str.length();i++){
    39             if(arr[str.charAt(i)] == 1){
    40                 System.out.println(str.charAt(i));
    41                 break;
    42             }
    43         }
    44     }
    45 }
     
     
  • 相关阅读:
    MySQL数据库高并发优化配置
    MySQL性能参数详解
    jQuery中过滤选择器first和first-child的区别
    Linux非常用命令
    jps命令学习
    通过乐观锁(版本号)降低并发时的锁竞争
    ReentrantLock 相关学习笔记
    grep 所有多个关键字
    ThreadLocal学习笔记
    Idea设置全白色 背景
  • 原文地址:https://www.cnblogs.com/theskulls/p/5276032.html
Copyright © 2011-2022 走看看