Home > Software design >  how to get String array containing distinct characters?
how to get String array containing distinct characters?

Time:11-11

i have a String "iye" and i want make it distinct and also i have a array ["hi", "bye", "bebe"] and i want to make each element of the array and get the distinct characters only so my array would be like this ["hi", "bye", "be"] an then at last i want to take each element from that distinct array and count how many characters of distinctArray[i] are present in the distinct String "iye" and i will store that count for each element of distinct array in same order respectively to the elements of distinct array for e.g

sample input = "iyee" and ["hi", "bye", "bebe"]

sample ouput = [1, 2, 1]

below is my solution not working for larger inputs

      static int[] mathProfessor(String B,String[] a){
      List<String> distinct = new ArrayList<String>();
      int[] arr = new int[a.length];

      // store each value of names array as distinct value
      for (int i = 0; i < a.length; i  ) {
        StringBuilder str = new StringBuilder();
        a[i].chars().distinct().forEach(c -> str.append((char) c));
        distinct.add(str.toString());
      }
      // System.out.println("distinct list: "   distinct.toString());

      // store the count
      int count = 0;
      for (int i = 0; i < distinct.size(); i  ) {
        String s = distinct.get(i);
        for (int j = 0; j < B.length(); j  ) {
          if (s.contains(Character.toString(B.charAt(j))))
            count  ;
        }
        arr[i] = count;
        count = 0;
      }

      return arr;
    }

CodePudding user response:

static int[] mathProfessor(String b, String[] a) {
    b = dist(b);
    int count = 0;
    String[] arr = new String[a.length];
    int[] countArr = new int[a.length];
    for (int i = 0; i < a.length; i  ) {
      arr[i] = dist(a[i]);
    }
    for (int i = 0; i < arr.length; i  ) {
      for (int j = 0; j < b.length(); j  ) {
        if (arr[i].contains(Character.toString(b.charAt(j))))
          count  ;
      }
      countArr[i] = count;
      count = 0;
    }

    //System.out.println(Arrays.toString(countArr));
    return countArr;
  }

  public static String dist(String s) {
    StringBuilder sb = new StringBuilder();
    Set<Character> set = new HashSet<Character>();
    for (int i = 0; i < s.length(); i  ) {
      if (set.add(s.charAt(i)) == true)
        sb.append(s.charAt(i));
    }
    return sb.toString();
  }

CodePudding user response:

Using Java 8 Streams:

    static int[] mathProfessor(String b, String[] a) {

        var distinctB = dist(b);
        System.out.println(distinctB);
        var result = new int[a.length];

        for(int i=0, j=a.length; i < j; i  ) {
            result[i] = (int) Arrays.stream(dist(a[i]).split("")).filter(distinctB::contains).count();
        }

        return result;

      }
    
      public static String dist(String s) {
        Set<String> set = new HashSet<>();
        set.addAll(Arrays.asList(s.split("")));
        return String.join("", set);
        
      }
  • Related