0

我最近遇到了一些技术面试,问题是:

Q.1 给定两个字符串“Hello”和“World”。打印出现在第一个而不是第二个字符串中的唯一字符

输出:He

我的答案:将一个字符串的每个字符与第二个字符的每个其他字符进行比较,根本不是最佳的(显然是错误的)。

Q.2 ABCABBABCAB, OUTPUT:4A5B2C`,(基本上计算每个字符的出现次数)一次
执行此操作,而不是字符串中的多次遍历,其他地方再次以最佳方式执行此操作。

同样,那里也很少有其他问题..

我的核心问题是:

  • 收集框架中的哪种数据结构将帮助我以最佳方式处理此类场景;和

  • 何时以及为什么要使用 Java 集合框架中的哪个特定数据结构?

另外,如果有此类主题的书籍,请告诉

任何帮助书籍、参考资料和链接都将对学习和理解有很大帮助。

重要提示:我需要实现数据结构的实时场景

我研究过,Collection API,不是彻底的,而是对层次结构和主要数据结构类的总结。我知道如何使用它们,但是我在哪里以及为什么使用它们?

4

5 回答 5

2
public class G {
public static void main(String[] args) {
    new G().printCharacterCount("ABCABBABCAB");
    System.out.println();
    new G().printUniqueCharacters("Hello", "world");
}

void printUniqueCharacters(String a, String b) {
    Set<Character> set = new HashSet<Character>();
    for (int i = 0; i < a.length(); i++)
        set.add(a.charAt(i));

    for (int i = 0; i < b.length(); i++)
        set.remove(b.charAt(i));

    for (Character c : set)
        System.out.print(c);
}

void printCharacterCount(String a) {
    Map<Character, Integer> map = new TreeMap<Character, Integer>();

    for(int i = 0; i < a.length(); i++) {
        char c = a.charAt(i);
        if(!map.containsKey(c))
            map.put(c, 0);

        map.put(c, map.get(c) +1);
    }

    for(char c : map.keySet()) {
        System.out.print(map.get(c) + "" + c);
    }
}
}
于 2012-10-23T14:19:31.293 回答
1

您可以使用的算法示例。

Q1。

  • 将 String1 的所有字母放在一个集合中(仅保留唯一条目)
  • 从集合中删除 String2 的所有字母
  • 您的集合现在包含 String1 中不在 String2 中的唯一字母

Q2。

  • 将字母出现的次数存储在 aMap<Character, Integer>
  • 如果字母不在地图中,则计数为 1
  • 如果地图中已经有一个字母,则需要增加计数

我知道如何使用它们,但我不知道在哪里以及为什么使用它们?

通过尝试自己解决这种难题;-)

于 2012-10-23T14:20:36.127 回答
1
Set<Character> set1=new HashSet<Character>(Arrays.asList(ArrayUtils.toObject("Hello".toCharArray())));
Set<Character> set2=new HashSet<Character>(Arrays.asList(ArrayUtils.toObject("World".toCharArray())));
set1.removeAll(set2);
System.out.println(set1);

使用 apache ArrayUtils.toObject(char[] array)。您可以改为编写 util 方法。

于 2012-10-23T14:24:26.033 回答
0

对于 #1 :

    String one = "Hello";
    String two = "World";
    Set<Character> set = new HashSet<Character>();

    for (int i = 0; i < one.length(); i++) {
        set.add(one.charAt(i));
    }

    for (int i = 0; i < two.length(); i++) {
        set.remove(two.charAt(i));
    }

    for (char ch : set) {
        System.out.println(ch);
    }

对于#2:

    String str = YourInput;
    int[] array = new int[26];
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        array[ch - 'A']++;
    }
    for (int i = 0; i < array.length; i++) {
        if (array[i] != 0) {
            System.out.println(array[i] + (char) (i + 'A'));
        }
    }
于 2013-04-19T13:11:57.953 回答
0
public static void main(String[] args) {
    String s1 = "Hello";
    String s2 = "World";

    List<Character> list1 = new ArrayList<Character>();
    List<Character> list2 = new ArrayList<Character>();
    for(char c : s1.toCharArray()){
        if(!list1.contains(c)){
            list1.add(c);
        }
    }
    for(char c : s2.toCharArray()){
        if(!list2.contains(c)){
            list2.add(c);
        }
    }
    List<Character> uniqueList = new ArrayList<Character>();
    for (Character character1 : list1) {
        boolean unique = true;
        for (Character character2 : list2) {
            if(character1.equals(character2)){
                unique = false;
            }
        }
        if(unique){
            uniqueList.add(character1);
        }
    }
    for (Character character : uniqueList) {
        System.out.print(character);
    }
}
于 2014-11-05T11:03:59.780 回答