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

题目:查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)


思路:

创建一个辅助数组(大小为256),数组的下标表示字符的ASCII码,遍历字符串,每出现一个,在对应位置加一,最后遍历数组就可以找到第一个出现两次的字符


代码:

char find_char_instr ( std :: string  & str )
{
      char num_of_char [256] = { '\0' };
      for ( size_t idx = 0; idx < str . size (); ++ idx )
     {
           num_of_char [ str [ idx ]]++;
     }
     
      for ( size_t idx = 0; idx < str . size (); ++ idx )
     {
           if ( num_of_char [ str [ idx ]] == 2)
               return str [ idx ];
     }
     
      return '\0' ;
}
int main ()
{
      std :: string   str = "abdecefabcdfabc" ;
      char ret = find_char_instr ( str );
      if ( ret == '\0' )
           cout << "没有出现两次的字符。" << endl ;
      else
           cout << "第一个出现两次的字符为 :" << ret << endl ;
      system ( "pause" );
      return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值