zoukankan      html  css  js  c++  java
  • 面试题:求最长非重复子序列

    题目:求字符串的最长非重复子序列。比如字符串“dabaccdeff”,它的最长非重复子序列为“dabcef”

    这道题目与 面试题35:第一个只出现一次的字符 非常相似。都可以通过对字符串球哈希来解。

    View Code
    #include<iostream>
    #include <stack>  
    #include<stdlib.h>
    using namespace std;
    
    void print(char *s,int len,char *hashtable);
    
    int NoReplicatedSubstring(char *s,int len)
    {    
        const int tablesize=256;
        char *hashtable=new char[tablesize];
        int i;
        int j;
        int count=0;
        //初始化hash[]
        for(i=0;i<tablesize;i++)
        {
            hashtable[i]='\0';
        }
    
        //第一次扫描
        for(i=0;i<len;i++)
        {
            hashtable[s[i]]=s[i];//将字符存入哈希表中
            //cout<<hashtable[s[i]];
        }
    
        /*    //方法0,按字符顺序输出字符串中的非重复子序列。
        for(i=0;i<tablesize;i++)
        {
            if(hashtable[i]!='\0')
            {
                cout<<hashtable[i];
            }
        }
        
    
        /* //方法1,按字符串顺序输出非重复子序列
        for(i=0;i<len;i++)
        {
            if(hashtable[s[i]]!='\0')
            {
                count++;
                cout<<hashtable[s[i]];
                hashtable[s[i]]='\0';
            }
        }
        */
    
        //输出方法2,按字符串逆序输出非重复子序列
        stack<char> c;//创建一个栈
        for(i=len-1;i>=0;i--)
        {
            if(hashtable[s[i]]!='\0')
            {
                c.push(hashtable[s[i]]);
                count++;
                hashtable[s[i]]='\0';
            }
        }
        //输出栈中的内容
        while(!c.empty())
        {
            cout<<c.top();
            c.pop();
        }
    
        cout<<endl;
        return count;
    }
    
    void main()
    {
        char *s="dabaccdeff";
        int len=strlen(s);
        int count=NoReplicatedSubstring(s,len);
        system("pause");
    }
    作者:xwdreamer
    欢迎任何形式的转载,但请务必注明出处。
    分享到:
  • 相关阅读:
    最小生成树计数
    Tree
    NOJ 成绩排名
    NOJ 成绩排名
    NOJ 成绩排名
    NOJ 成绩排名
    NOJ Physics
    NOJ Physics
    NOJ Physics
    NOJ Physics
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2722623.html
Copyright © 2011-2022 走看看