题目:
A、B两人参加默契度测验,系统记录了两人打字的全过程,若在打字过程中按了退格,则记录 #
。请你根据两人打字的过程记录,判断两人最终输入的内容是否一致。
输入描述:
第一行,输入一个字符串a,表示A回答问题时打字的过程记录;
第二行,输入一个字符串b,表示B回答问题时打字的过程记录。
输出描述:
若两人最终输入答案内容一致,则输出一次答案内容即可;
若两人最终输入答案内容不一致,则分别输出两人的答案内容,每个答案独立成一行。
输入示例:
样例1:
Ao#pple
Ora###Appll#e
样例2:
Ao###egg
##e#milkk#
输出示例:
样例1:
apple
样例2:
egg
milk
题目分析:
-
利用
Scanner
进行字符串的输入 -
将字符串转化为字符数组进行处理
-
利用栈的压栈和入栈对
#
号进行处理(将#
号的前一个字符删除,#
号不入栈) -
将栈转为字符串返回
-
使用
String.equals()
方法进行判断A和B输入的最终字符串是否相等5.1 结果为
true
,则任意输出其中一项5.2 结果为
false
,则两项都要输出
代码实现:
package 默契度测验;
import java.util.Scanner;
import java.util.Stack;
/**
* @author 江七
* @version 1.0
* @date 2021/9/22 12:06
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("A同学请输入答案:");
String as = sc.nextLine();//字符串
char[] ac = as.toCharArray();//将字符串转化为字符数组
String stringA = getString(ac);//对字符数组进行处理,得到最终的字符串栈
System.out.print("B同学请输入答案:");
String bs = sc.nextLine();//字符串
char[] bc = bs.toCharArray();//将字符串转化为字符数组
String stringB = getString(bc);//对字符数组进行处理,得到最终的字符串栈
if (stringA.equals(stringB)) {
System.out.println("两人最终输入答案内容一致:" + stringA);
} else {
System.out.println("A同学输入的答案:" + stringA);
System.out.println("B同学输入的答案:" + stringB);
}
}
/**
* 对字符数组用栈进行过滤 #号和删除 # 号前面的内容
* 然后将栈转化为最终需要的字符串
* @param c 字符数组
* @return
*/
public static String getString(char[] c) {
Stack stack = new Stack();
for (char arr : c) {
if (arr == '#') {
if (!stack.empty()) {//不为空
stack.pop();//弹栈
}
} else {
stack.push(arr);//压栈
}
}
StringBuilder result =new StringBuilder();
while(!stack.empty()) {
result.append(stack.pop()); //按出栈顺序组成字符串,即为反转字符串
}
return result.reverse().toString();//使用reverse()函数在将其反转回来即可
}
}