# HackerEarth Partial Digit Sequence problem solution

In this HackerEarth Partial Digit Sequence problem solution You are given an array A of length N. The partial digit subsequence of an array A is a subsequence of integers in which each consecutive integers have at least 1 digit in common. You are required to find the length of the longest partial digit subsequence from the given array.

## HackerEarth Partial Digit Sequence problem solution.

`import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.FilterInputStream;import java.io.BufferedInputStream;import java.io.InputStream;public class Solution{    public static void main(String[] args) {        new Thread(null, new Runnable() {            public void run() {                new Solution().solve();            }        }, "1", 1 << 26).start();    }    void solve() {        InputStream inputStream = System.in;        OutputStream outputStream = System.out;        ScanReader in = new ScanReader(inputStream);        PrintWriter out = new PrintWriter(outputStream);        PARTIAL_DIGIT_SEQUENCE solver = new PARTIAL_DIGIT_SEQUENCE();        solver.solve(1, in, out);        out.close();    }    static class PARTIAL_DIGIT_SEQUENCE {        public void solve(int testNumber, ScanReader in, PrintWriter out) {            int n = in.scanInt();            int[] ans = new int[10];            for (int i = 0; i < n; i++) {                long temp = in.scanLong();                boolean[] digits = new boolean[10];                while (temp > 0) {                    digits[(int) (temp % 10)] = true;                    temp /= 10;                }                int max = 0;                for (int j = 0; j < 10; j++) if (digits[j]) max = Math.max(ans[j], max);                for (int j = 0; j < 10; j++) if (digits[j]) ans[j] = max + 1;            }            int answer = 0;            for (int i = 0; i < 10; i++) answer = Math.max(answer, ans[i]);            out.println(answer);        }    }    static class ScanReader {        private byte[] buf = new byte[4 * 1024];        private int index;        private BufferedInputStream in;        private int total;        public ScanReader(InputStream inputStream) {            in = new BufferedInputStream(inputStream);        }        private int scan() {            if (index >= total) {                index = 0;                try {                    total = in.read(buf);                } catch (Exception e) {                    e.printStackTrace();                }                if (total <= 0) return -1;            }            return buf[index++];        }        public int scanInt() {            int integer = 0;            int n = scan();            while (isWhiteSpace(n)) n = scan();            int neg = 1;            if (n == '-') {                neg = -1;                n = scan();            }            while (!isWhiteSpace(n)) {                if (n >= '0' && n <= '9') {                    integer *= 10;                    integer += n - '0';                    n = scan();                }            }            return neg * integer;        }        private boolean isWhiteSpace(int n) {            if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1) return true;            else return false;        }        public long scanLong() {            long integer = 0;            int n = scan();            while (isWhiteSpace(n)) n = scan();            int neg = 1;            if (n == '-') {                neg = -1;                n = scan();            }            while (!isWhiteSpace(n)) {                if (n >= '0' && n <= '9') {                    integer *= 10;                    integer += n - '0';                    n = scan();                }            }            return neg * integer;        }    }}`

### Second solution

`#include<bits/stdc++.h>#define ll long long#define ld long double#define mp make_pair#define pb push_back#define si(x) scanf("%d",&x)#define pi(x) printf("%d\n",x)#define s(x) scanf("%lld",&x)#define p(x) printf("%lld\n",x)#define sc(x) scanf("%s",x)#define pc(x) printf("%s",x)#define pii pair<int,int>#define pll pair<ll,ll>#define F first#define S second#define inf 1e18#define prec(x) fixed<<setprecision(15)<<x#define all(x) x.begin(),x.end()#define rall(x) x.rbegin(),x.rend()#define mem(x,y) memset(x,y,sizeof(x))#define PQG priority_queue< int,std::vector<int>,std::greater<int> >#define PQL priority_queue< int,std::vector<int>,std::less<int> >#define PQPL priority_queue<pii ,vectosr< pii >, less< pii > >#define PQPG priority_queue<pii ,vector< pii >, greater< pii > >#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)using namespace std;int main() {    #ifndef ONLINE_JUDGE        freopen("input.txt","r",stdin);        //freopen("output.txt","w",stdout);    #endif    int n; cin>>n;    assert(n>=1 && n<=100000);    string s[n];    for(int i=0;i<n;i++) {        cin>>s[i];        ll x=0;        for(char c:s[i]) {          x=x*10+(ll)(c-'0');        }        assert(x>=1 && x<=inf);    }    int cnt[10];    memset(cnt,0,sizeof(cnt));    for(int i=0;i<n;i++) {        int sz=s[i].size();        set<int>ss;        for(int j=0;j<sz;j++) {            ss.insert(s[i][j]-'0');        }        int val=0;        for(int x:ss) val=max(val,cnt[x]);        for(int x:ss) cnt[x]=val+1;    }    int ans=0;    for(int i=0;i<10;i++) {        ans=max(ans,cnt[i]);    }    cout<<ans<<endl;    return 0; }`