查找字符串

来源:互联网 发布:淘宝退款要多久 编辑:程序博客网 时间:2024/06/18 12:24

找出指定字符串中最后一个只出现一次的字符,若全部字符都有重复,则返回最后一个重复最多的字符。
char findLastChar(const char *string);
示例:
输入:“abbccdffgg”
返回:“d”
输入:“aaabbbccddee”
返回:“b”

#include <iostream>#include <string.h>using namespace std;char findLastChar(const char* string);int binarySearch(char *srcArray,char des);int main(){    char string1[11]="abbccdffg";    char string2[19]="aabbbccdddeeeee";    char s1,s2;    s1=findLastChar(string1);   cout << s1<<endl;    s2=findLastChar(string2);    cout << s2<<endl;   return 0;}char findLastChar(const char* string){    char c[27]="abcdefghijklmnopqrstuvwxyz";    char temp;    int cnt[26]={0};    int L,num;    L=strlen(string);    for(int i=0;i<L;i++)        {        num=binarySearch(c,string[i]);        //cout<<"num="<<num<<endl;        if(num!=-1)        cnt[num]=cnt[num]+1;        //cout<<"cnt["<<num<<"]="<<cnt[num]<<endl;    }    for(int j=L-1;j>=0;j--)     {        if(cnt[j]==1)        {            temp=c[j];            break;        }    }    if(!temp)    {        int max=0,index;        for(int k=0;k<L;k++)        {            if(cnt[k]>=max)            {                max=cnt[k];                index=k;                        }        }        temp=c[index];    }       return temp;}int binarySearch(char *srcArray,char des){           int low=0;           int high=strlen(srcArray);           while(low<=high)        {                       int middle=low+((high-low)>>1);             int x=high-low;            int y=x>>1;            //cout<<low<<"----"<<high<<"----"<<x<<"----"<<y<<endl;            if(des==srcArray[middle])            {                  return middle;                }else if(des<srcArray[middle])            {                  high=middle-1;               }            else            {                  low=middle+1;              }          }          return-1;                }
原创粉丝点击