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
没有找到这样的字符!

原文地址:https://www.cnblogs.com/wuzetiandaren/p/4261992.html