HackerEarth Partial Digit Sequence problem solution YASH PAL, 31 July 2024 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("%dn",x)#define s(x) scanf("%lld",&x)#define p(x) printf("%lldn",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; } coding problems