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+"里第一个只出现一次的字符为:空格\n");
45                 }
46                 else
47                     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
没有找到这样的字符!

时间: 2024-10-02 22:50:11

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

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

第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎没有必要. 对每一个字符,都依次和后面的比较,若出现了两次,则检查下一个字符,遇到只出现一次的,直接输出就好了. /* 第 17 题(字符串): 题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:这道题是 2006 年 google 的一道笔试题. */

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

题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. 分析:这道题是2006年google的一道笔试题. 下面给我的解法,采用linkedhashmap的有序,即可实现 private void getOne(String str){ LinkedHashMap<String, Object> linked=new LinkedHashMap<String, Object>(); for (char charstr : str.toCharArray

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

题目:在一个字符串中找到第一个只出现一次的字符. 例如: 输入abaccdeff,则输出b 思路剖析: 由于题目与字符出现的次数相关,可以统计每个字符在该字符串中出现的次数. 要达到这个目的,需要一个数据容器来存放每个字符出现的次数. 在这个数据容器中可以根据字符来查找它出现的次数.在常用的数据容器中,哈希表正是这个用途. 由于字符是一个长度为8的数据类型,因此总共有256种可能.于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项.而数组中存储的是每个

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

偶然在群里看到这个小题, 就用python做了做. 思路就是建一个够大的列表并初始化,把每个字符的asc码作为下标,存到列表里, 然后该位置的值就存字母的出现次数, 最后再迭代原字符串并判断列表值是否等于1. 输出第一个值为1的字符即可. ps:ord()是把字符串转换为它的asc码. 实现如下: def welcome(p_str): bit_map = [0 for x in range(1000)] temp = p_str for a in temp: bit_map[ord(a)] +

微软算法100题17 字符串中找到第一个只出现一次的字符

第17 题:题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b 思路:要找出只出现一次的字符,很明显需要统计所有字符出现的次数,然后找出次数为一的那一个,统计次数最先想到的是hashTable,但此题有更好的办法,因为每个char其实对应一个唯一的ASCII值,所以可以构造一个包含所有字符ASCII值的int数组,来映射字符与出现次数的关系,同时一个char是8个字节,总共有256个可能,所以该数组的大小应为256 1 package com.rui.micros

在一个字符串中找到第一个仅仅出现一次的字符

Google 2006年的一道笔试题,难度系数低 题目描写叙述: 在一个字符串中找到第一个仅仅出现一次的字符.如输入abaccdeff,则输出b. 逻辑分析: 1.简单粗暴O(n^2),一个显而易见的想法是像冒泡排序一样,採用两个循环,内层循环对外层判定元素arr[i]进行轮询,当发现arr[i] == arr[j]时,本次循环终止,显然,时间复杂度O(n^2),不使用额外空间. #include <stdio.h> #include <stdlib.h> #include <

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

题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 如输入 abaccdeff,则输出 b. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1 我们这里有两种解题思路 1.蛮力法. 遍历数组,每找到一个字符是遍历一下整个数组,看看该字符是否存在数组下表不一致,但是ASSIC码值一样的字符还存在,如果不存在,则是返回该字符,如果存在,则继续遍历.该算法的时间复杂度为O(n

给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。

1. 给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1. sample: 输入:"abcdefcba" 输出:3 解法:先遍历字符串,用一个map记录每个字符出现的次数,再次遍历字符串,找到第一个只出现一次的字符,复杂度为O(n). #include <iostream> #include <string> #include <cstring> #include <map> using namespace std; int

编程基础之字符串——02找第一个只出现一次的字符

描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符.如果没有,输出no. 输入一个字符串,长度小于100000.输出输出第一个仅出现一次的字符,若没有则输出no.样例输入 abcabd 样例输出 c自己做不出,但得到了两个别人的答案: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char a[100100]; 6 int mai