面试题35:第一个只出现一次的字符

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:59   2174   0

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

算法思路:字符是一个长度为8的数据类型,因此有256种可能,所以创建一个长度为256的数组,遍历字符串,将当前字符的ASCII码值作为数组的下标,值为当前字符出现的次数,然后再次遍历字符串,找出第一个以当前字符为下标的数组中值为1的字符就是要找的字符。

#include <iostream>
using namespace std;


char FindNotRepeatChar(char * str)
{
 if(str==NULL)
  return '\0';
 const int length=256;
 unsigned int hashTable[length];//创建数组
 //初始化数组
 for(int i=0;i<length;i++)
 {
  hashTable[i]=0;
 }
 //遍历字符串,记录每个字符出现的次数放在以当前字符ASCII码值为下标的数组中
 char * key=str;
 while((*key)!='\0')
 {
  hashTable[(*key)]++;
  key++;
 }
 //再次遍历字符串
 key=str;
 while((*key)!='\0')
 {
  if(hashTable[(*key)]==1)
  {
   return (*key);
  }
  key++;
 }
 return '\0';
}
int main()
{
 char * str="abaccdeft";
 cout<<FindNotRepeatChar(str)<<endl;
 return 0;
}

java:

public class FindNotRepeatChar {

 /**
  * @param args
  */
 public static void main(String[] args) {
  char c=findNotRepeat("abcba");
  System.out.println(c);

 }
 
 public static char findNotRepeat(String str)
 {
  if(str==null)
   return ' ';
  
  int[] count=new int[256];
  for(int i=0;i<count.length;i++)
  {
   count[i]=0;
  }
  
  for(int i=0;i<str.length();i++)
  {
   count[str.charAt(i)]++;
  }
  
  for(int i=0;i<str.length();i++)
  {
   if(count[str.charAt(i)]==1)
    return str.charAt(i);
  }
  
  return ' ';
 }

}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP