题目:华为OD机试题,用 Java 解【去除多余空格】问题_梦想橡皮擦的博客-CSDN博客
输入-输出示例:
Life is painting a picture, not doing 'a sum'.
8 15,20 26,43 45
输出:
Life is painting a picture, not doing 'a sum'.
[8,15][19,25][42,44]
实现步骤:
① 输入的单词下标存入数组中,方便用下标去修改值。
int[] indexArr
② 遍历字符串,查找出删除的空格的索引,存入集合中。
List<Integer> delIndexList
③ 单词下标 indexArr 和要删除的索引 delIndexList ,对比,删除后下标减一。
④ 遍历输出字符串。
代码示例:
public class Test1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = br.readLine()) != null) {
//封装第二行输入索引:int[] indexArr
String[] split = br.readLine().split(",");
int[] indexArr = new int[split.length * 2];
for (int i = 0; i < split.length; i++) {
int n1 = Integer.parseInt(split[i].split(" ")[0]);
int n2 = Integer.parseInt(split[i].split(" ")[1]);
indexArr[i * 2] = n1;
indexArr[i * 2 + 1] = n2;
}
System.out.println(extracted(str, indexArr));
}
}
private static String extracted(String str,int[] indexArr) {
//记录要删除的index
List<Integer> delIndexList = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '\''){
i++;
while (str.charAt(i) != '\''){
i++;
}
}else{
if (i+1 < str.length()){
char c1 = str.charAt(i + 1);
if (c == ' ' && c1 == ' '){
delIndexList.add(i+1);
}
}
}
}
//删除的空格,关键词要减一
for (Integer del : delIndexList) {
for (int i = 0; i < indexArr.length; i++) {
if (del < indexArr[i]){
indexArr[i] -= 1;
}
}
}
//遍历输出
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (!delIndexList.contains(i)){
sb.append(str.charAt(i));
}
}
sb.append("\n");
//[8, 15][19, 25][42, 44]
for (int i = 0; i < indexArr.length; i++) {
sb.append("["+indexArr[i]+","+indexArr[i+1]+"]");
i++;
}
return sb.toString();
}
}