题目分析:
就是三种情况的摩斯密码解密,分别有组合:“.”、“-.”、“--”。由此可见“.”不能作为两位值的开头
思路分析:
输入:整行输入再转为字符数组
数据处理:从首位到倒数第二位遍历,根据三种情况存入对应值给答案集合
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
ArrayList<Integer> re=new ArrayList<>();//答案集合
String input=sc.nextLine();
char[] arr=input.toCharArray();//存值
for (int i=0;i<arr.length-1;i++){//遍历确认情况
if (arr[i]=='.'&&(arr[i+1]=='-'||arr[i+1]=='.')){//情况一
re.add(0);//存值0
} else if (arr[i]=='-'&&arr[i+1]=='.') {//情况二
re.add(1);//存值1
arr[i+1]= ' ';//并清除后一位,避免重复操作
}else if (arr[i]=='-'&&arr[i+1]=='-') {//情况三
re.add(2);//存值2
arr[i+1]= ' ';//并清除后一位,避免重复操作
}
}
if (arr[arr.length-1]=='.'){//这个时候会出现一个特殊情况,如果倒数第二位没有被清除,那就会执行上述判断中的情况二,不会执行这一步,如果倒数第二位被清除,而最后一位是“.”时,只能说明这是情况一,但是由于遍历时的数组设置不会执行到这一位,所以手动add0
re.add(0);
}
for (int temp:re) {//遍历输出
System.out.print(temp);
}
}
}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。
标签:32B,Java,String,博尔兹,input,sc,new,public,Scanner From: https://blog.csdn.net/Dr_Si/article/details/144250358