In this HackerRank String Construction problem solution, we have given n strings and we need to find and print the minimum cost of copying each string to a new string on a new line.
Problem solution in Python.
#!/bin/python3 import sys n = int(input().strip()) for a0 in range(n): s = input().strip() p_set = set() for c in s: p_set.add(c) print(len(p_set))
Problem solution in Java.
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); for (int i = 0; i < n; i++) { int custo = 0; String s = input.next(); StringBuilder p = new StringBuilder(); for (int j = 0; j < s.length(); j++) { String c = String.valueOf(s.charAt(j)); if (p.indexOf(c) == -1) ++custo; p = p.append(c); } System.out.println(custo); } } }
Problem solution in C++.
#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <string> #include <bitset> #include <cstdio> #include <limits> #include <vector> #include <climits> #include <cstring> #include <cstdlib> #include <fstream> #include <numeric> #include <sstream> #include <iostream> #include <algorithm> #include <unordered_map> using namespace std; int main(){ int n; cin >> n; for(int a0 = 0; a0 < n; a0++){ string s, soFar = ""; cin >> s; int cost = 0; for (char c : s) { if (soFar.find(c) == string::npos) cost++; soFar = soFar + c; } cout << cost << endl; } return 0; }
Problem solution in C.
#include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <limits.h> #include <stdbool.h> int main(){ int n,i,j,c=0; scanf("%d",&n); for(int a0 = 0; a0 < n; a0++){ char* s = (char *)malloc(10240 * sizeof(char)); scanf("%s",s); for(i=0;i<strlen(s);i++){ for(j=0;j<i;j++){ if(s[i]==s[j])break; }if(i==j){c++;} } printf("%dn",c);c=0; } return 0; }