| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖
标题:求更好的算法
只看楼主 加入收藏
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
求更好的算法
查找一个字符串中第一次且只出现一次的字符,下面是我的代码,希望大神能够给出更好的算法,谢谢!

void FoundChar(char *pStr)
{
    int i,j,length,n=0;
    length = strlen(pStr);
    for(i=0;i<length;i++)
    {
        for(j=0;j<length;j++)
        {
            if(pStr[i]==pStr[j])
                n++;
        }
        if(n==1)
        {
            printf("%c\n",pStr[i]);
            break;
        }
        else
            n=0;
    }
}
搜索更多相关主题的帖子: 字符串 
2011-12-05 21:45
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:7 
开一个int count[256]大小的数组,对字符串先扫描一次,for (i=0; i<strlen(pStr); i++) count[pStr[i]]++;

然后再扫描一次,第一个Count[pStr[i]]=1的即为答案,时间复杂度为O(N)
2011-12-05 22:10
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
程序代码:
#include
#include
void FoundChar(char *pStr)
{
    int i,j,length;
    char c;
    length = strlen(pStr);
    int haxi[128] = {0};
    bool find = false;
    for(i=0;i<LENGTH;I++)
    {
        haxi[pStr[i]]++;
    }
    for(i=0;i<LENGTH;I++)
    {
        if(1 == haxi[pStr[i]])
            break;
    }
    if(i<LENGTH)PRINTF("%C\N",PSTR[I]);
    else printf("no\n");
}
main()
{
    char a[] = "abdabfbccdf";
    FoundChar(a);
}
我也只能想出n的算法

                                         
===========深入<----------------->浅出============
2011-12-05 22:26
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:7 
程序代码:
#include <stdio.h>
#include <string.h>

void FoundChar( char *pStr )
{
    int i , len , num = 1 ;
    char mapOfChar[256] = {0} ;
    int numOfChar[256] = {0} ;
    char orderOfChar[256] = {0} ;

    len = (int)strlen( pStr ) ;

    for( i = 0 ; i < len ; ++i )
    {
        if( !mapOfChar[pStr[i]] )
        {
            mapOfChar[pStr[i]] = num  ;
            orderOfChar[num] = pStr[i] ;
            numOfChar[num] = 1 ;
            num++ ;
        }
        else
        {
            numOfChar[mapOfChar[pStr[i]]]++ ;
        }
    }

    for( i = 1 ; i < num ; ++i )
    {
        if( numOfChar[i] == 1 )
            break ;
    }

    printf("%c\n", orderOfChar[i] ) ;

}

int main()
{
    char s[1001] ;

    scanf("%s", s ) ;

    FoundChar( s ) ;

    return 0 ;
}
只扫描一次原字符串,双重哈希
2011-12-05 22:35
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:0 
三位大神的算法差不多嘛,还是谢谢给位啦!

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-12-05 22:46
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
回复 3楼 laoyang103
看到这个问题,我想起来上次你说的哈希表,是否就是这个样子的啊?
2011-12-05 22:49
快速回复:求更好的算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029149 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved