【问题标题】:How to approach this hackerrank puzzle?如何解决这个hackerrank难题?
【发布时间】:2015-12-03 19:30:12
【问题描述】:

我有一个字符串 [5:10, 1:2],我必须在其中压缩该字符串并同时进行排序。 我使用了这个正则表达式

String[] strRange = ranges.replaceAll("\\s", "").replaceAll("[^A-Za-z0-9 ]"," ").split(" ");

将其转换为简单的数字字符串数组[5,10,1,2]

我对整数进行了一些字符串操作,以便可以将该字符串数组存储到ArrayList<Integer>

不知何故,我使用 Collections.sort() [1,2,5,10] 对列表进行了排序。

我需要将排序后的Arraylist 转换回[1:2,5:10]

谁能帮我集思广益这个问题?

【问题讨论】:

  • 只需遍历您的数组并构建一个字符串。放 : 或 , 根据计数器的模
  • @hsnkhrmn 如果您不介意,请详细说明您的逻辑方法。我只是尝试了简单的方法 'arr.get(j)+":"+arr.get(j+1)+"," +arr.get(j+2)+":"+arr.get(arr.size ()-1))' 并且它适用于给定的字符串。谢谢。
  • (什么首先用固定字符串替换一个模式并立即在 split() 中使用该字符串的想法?只需使用 ranges.replaceAll("\\s+", "").split("[^A-Za-z0-9 ]") 就可以了,但考虑使用Stream<String> Pattern.splitAsStream(CharSequence input)。)

标签: java string algorithm sorting


【解决方案1】:

我无法将其发布到评论部分。请看下面:

List<Integer> integers = Arrays.asList(1, 2, 3, 4);

int i = 0;
StringBuilder sb = new StringBuilder("[");
for (int value : integers) {
    sb.append((i == 0) ? "" : (i % 2 == 0 ? "," : ":")).append(value);
    i++;
}
sb.append("]");
System.out.println(sb.toString());

输出是:

[1:2,3:4]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2011-01-09
    • 2016-06-02
    • 2017-02-28
    相关资源
    最近更新 更多