首页 > 代码库 > 17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

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 args14      */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+"里第一个只出现一次的字符为:空格\n");45                 }46                 else47                     System.out.println("字符串"+str+"里第一个只出现一次的字符为:"+temp+"\n");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
没有找到这样的字符!

 

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