1

我今天有一个面试,我被要求对一个包含字符串和整数的列表进行排序。就像这样

输入:

汽车 巴士 4 -5 苹果 3 -1

输出:

苹果巴士 -5 -1 汽车 3 4

起初我被卡住了,因为我从未见过这样的事情,但我试图做的是创建 2 个子列表,一个包含字符串,另一个包含 int。我这样做了,但时间已经到了,我无法完成.

我也被困在我试图循环遍历列表并检查它的字符串是否比将元素添加到子列表 1 以及它的 int 是否比将元素添加到子列表 2 的部分。我被困在这里,因为我不知道如何检查是否元素是字符串或整数。

如果我在错误的部分或其他地方发布了这个问题,也很抱歉。请随时将此问题移至正确的部分。

谢谢你

4

2 回答 2

2

我会使用两个列表,对它们进行排序,但您必须记住原始排序,aLinkedList<Boolean>足以完成该任务。

public static String sortString(String input) {
    Scanner s = new Scanner(input);

    LinkedList<String> strings = new LinkedList<String>();
    LinkedList<Integer> integers = new LinkedList<Integer>();
    LinkedList<Boolean> types = new LinkedList<Boolean>();

    while(s.hasNext()) {
        String nextToken = s.next();
        try {
            int nextInteger = Integer.parseInt(nextToken);
            integers.add(nextInteger);
            types.add(true);
        } catch(NumberFormatException e) {
            strings.add(nextToken);
            types.add(false);
        }
    }

    Collections.sort(strings);
    Collections.sort(integers);

    StringBuilder builder = new StringBuilder();

    Iterator<Boolean> iter = types.iterator();

    while(iter.hasNext()) {
        boolean currType = iter.next();
        if (currType) {
            builder.append(integers.remove(0));
        } else {
            builder.append(strings.remove(0));
        }
        if (iter.hasNext()) builder.append(" ");
    }

    return builder.toString();
}
于 2012-11-19T21:56:27.200 回答
1

假设-1-5int一个简单的解决方案:

public String sortStringWithInts(String input){  
        String[] parts = input.split("\\s");  
        List<String> strings = new ArrayList<String>();  
        List<Integer> ints = new ArrayList<Integer>();  
        for(String part:parts){  
            if(isNumber(part)){                 
                 ints.add(Integer.valueOf(part));               
            }  
            else{  
                strings.add(part);  
            }  
        }  
        Collections.sort(strings);  
        Collections.sort(ints);  
        return createResult(strings, ints, parts);           
    }  

    private String createResult(List<String> strings, List<Integer> ints, String[] parts) {  
        StringBuilder result = new StringBuilder();       
        for(String part:parts){  
            if(isNumber(part)){  
                result.append(ints.remove(0)).append(" ");              
            }  
            else{  
                result.append(strings.remove(0)).append(" ");  
            }  
        }  

        return result.toString();  
    }  

    private boolean isNumber(String part) {  
        try{  
            Integer.valueOf(part);  
            return true;  
        }  
        catch(Exception e){  
            return false;  
        }  
    }  

注意:输出将是:apple bus -5 -1 car 3 4因为-5 < -1和不像你的 OP

于 2012-11-19T21:57:10.947 回答