您的位置:首页 > 编程语言

2014UC的最后一道题题目:第一个只出现一次的字符[算法]

2013-10-14 21:04 218 查看
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

分析:这道题原本是2006年google的一道笔试题。这里UC加上了一个限制,就是不可以用for和while,本来这简直是一道送分题,当时教室热爆了,头脑也跟着发热,居然错掉了,实在是可惜,如果这里可以用for和while,那只需要用一个256大小的数组()就可以记录哪些元素不是第一次被访问的,问题就十分简单了,但是,这里不能用for,其实也很简单,可以用递归,类的构造函数,还有函数指针来模拟for循环就可以了.

这里先给出递归的办法:

#include<iostream>
using namespace std;
int lower[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int upper[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void SetLU(char* str)
{
if( *str =='\0' ) return ;
if( 'a'<=*str && *str<='z')
++lower[(*str-'a')];

if( 'A'<=*str && *str<='Z')
++upper[(*str-'A')];
return SetLU(str+1);
}
char GetLU(char* str)
{
if( 'a'<=*str && *str<='z' && lower[*str-'a']==1)
return *str;
if('A'<=*str && *str<='Z' && upper[*str-'A']==1)
return *str;
return GetLU(str+1);
}
int main()
{
char str[]="abaccdeff";
SetLU(str);
char c=GetLU(str);
cout<<c<<endl;
return 0;
}

上面的程序十分的简单,做的事情只是用递归模拟一个循环,这次笔试需要总结的问题十分之多,首先操作系统的内容十分不扎实,其次没有试过在纸上写代码,速度和准确率都十分糟糕.还需要继续修练.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐