zoukankan      html  css  js  c++  java
  • 17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261992.html 

    声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。

    题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b 。

    题目分析:

      求字符串的某个字符出现的次数可以很巧妙的运用split("字符") 方法将原字符串分割为字符串数组,再判断这个字符串数组的长度来实现,若长度等于2,则该字符就刚好出现一次。

      值得注意的是:该字符出现m次,split("字符")方法的结果,若当该字符出现在字符串开头或中间时,如gaaafffvvvttt,aaaffgfvvvttt你得到的长度是m+1;当该字符出现在字符串末尾时,以该字符split字符串如aaafffvvvtttg,你得到的长度是m,因此要将原字符串进的尾部行一些处理。

      我的处理方式是:先的到原字符串的长度n,再在字符串的末尾加上一个非空字符(这样才能处理最后一个字符本身就为空的情况),而遍历的时候仍然是[0,n-1],不遍历这后来添加的字符。

    java实现源码:

     1 package com.interview;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * 题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 
     7  * @author wjh
     8  *
     9  */
    10 public class _17FirstChar {
    11 
    12     /**
    13      * @param args
    14      */
    15     public static void main(String[] args) {
    16         _17FirstChar invoker= new _17FirstChar();
    17         Scanner scan = new Scanner(System.in);
    18         while(true){
    19             System.out.println("请输入一个字符串:");
    20             String str= scan.nextLine();
    21             if(str.equals("退出")){
    22                 System.exit(0);
    23             }
    24             invoker.findCharacter(str);
    25         }
    26     }
    27     
    28     //在一个字符串中找到第一个只出现一次的字符
    29     private void findCharacter(String str){
    30         if(str==null || str.equals("")){
    31             System.out.println("输入的字符串为空!");
    32             return;
    33         }
    34         int n = str.length();
    35         //对字符串的末尾进行处理,否则当最后一个为空格时或某一个字符第
    36                    //一次出现在末尾时无法正确处理
    37         String str1 = str+"a";  //这里添加一个除了空格之外的任意字符
    38         for(int i=0;i<n;i++){
    39             char temp = str1.charAt(i);
    40             String[] ss=str1.split(""+temp);  //以第i个字符将字符串分割成字符数组
    41             int length = ss.length;
    42             if(length==2){
    43                 if(temp==' '){
    44                     System.out.println("字符串"+str+"里第一个只出现一次的字符为:空格
    ");
    45                 }
    46                 else
    47                     System.out.println("字符串"+str+"里第一个只出现一次的字符为:"+temp+"
    ");
    48                 return;
    49             }
    50         }
    51         System.out.println("没有找到这样的字符!");
    52     }
    53 }
    展开

    运行结果:

    请输入一个字符串:
    atghtghjyuuy
    字符串atghtghjyuuy里第一个只出现一次的字符为:a

    请输入一个字符串:
    tghttaghjyuuy
    字符串tghttaghjyuuy里第一个只出现一次的字符为:a

    请输入一个字符串:
    tghttghjyuuya
    字符串tghttghjyuuya里第一个只出现一次的字符为:j

    请输入一个字符串:
    tghttghayuuyaj
    字符串tghttghayuuyaj里第一个只出现一次的字符为:j

    请输入一个字符串:
    eeerrryuyddt
    字符串 eeerrryuyddt里第一个只出现一次的字符为:空格

    请输入一个字符串:
    eeerrryuyutddt
    没有找到这样的字符!

  • 相关阅读:
    为什么用strlcpy取代strncpy
    linux系统调用和库函数调用的区别
    VC、PE和天使投资是什么意思?有什么区别?
    AWS使用心得:当初我曾错过的那些宝贵经验
    bzoj 2208: [Jsoi2010]连通数
    android学习笔记(5)Activity生命周期学习
    Nginx 进程间通信
    手写一个节点大小平衡树(SBT)模板,留着用
    JavaFX学习之道:JavaFX之TableView
    Docker 命令行和后台參数
  • 原文地址:https://www.cnblogs.com/wuzetiandaren/p/4261992.html
Copyright © 2011-2022 走看看