2017年360公司校招Java研发笔试编程第一题

2017年360公司校招笔试编程第一题

(服务端开发工程师-Java职位)

---------------------------------------------------------------------------------------------------------------

 /*题目描述:
小B乘火车和朋友们一起在N市到M市之间旅行。她在路途中时睡时醒。当她醒来观看窗外的风景时,注意到每个火车站都有一种特别颜色的旗帜,但是她看到的旗帜仅仅是经过的一小部分。
小B在乘车过程中有两次清醒的时间,她到达旅程终点时处于睡梦中。出站时,她和朋友们谈论着一路的见闻,朋友们觉得很有意思。他们把N到和M之间经过车站的旗帜颜色依次列出来,
然后告诉你小B记得的旗帜颜色序列,让你判断小B究竟是从N和M之间哪些方向才能看到所说颜色的旗帜,还是根本就不可能看到?颜色用字母代表,相同的字母代表相同的颜色,
不同的字母则表示不同的颜色。
输入
输入中有多组测试数据。每组测试数据包含三行,第一行为一个由小写拉丁字母构成的非空字符串,长度不超过10^5,表示N到M之间车站的颜色。火车从M向N运行时,经过的车站相同,
只是方向相反。第二行为小B在第一次睡醒时看到的颜色序列,第三行为小B在第二次睡醒时看到的颜色序列。两个序列都是小写的拉丁字母构成的字符串,长度不超过100个字母。
每个序列的颜色顺序排列按小B看到的时间顺序排列。
输出
对每组测试数据,在单独的行中输出小B的旅行方向。
forward – 由N到M方向;
backward – 由M到N方向;
both – 两种方向都有可能;
invalid – 不可能看到这样的颜色序列;

样例输入
atob
a
b
aaacaaa
aca
aa
样例输出
forward
both

Hint
火车假定时刻处于运动状态,不会两次看到同一个旗帜。N市和M市的车站没有旗帜。*/ 


import java.util.Scanner;

public class Main {
	/** 2017年360公司校招 编程1题	
	 * 
	 * */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNext()) {
			String line = in.nextLine();
			String line1 = in.nextLine();
			String line2 = in.nextLine();
			//去程
			Boolean b1 = line.contains(line1);
			Boolean b2 = false;
			Boolean b3 = false;
			if (b1 == true) {
				String line3 = line.substring(line.indexOf(line1) + line1.length());
				b2 = line3.contains(line2);
				if (b2 == true) {
					b3 = true;
				}
			}
			//返程
			StringBuilder sb1 = new StringBuilder(line);
			sb1.reverse();	//输入的旗帜颜色逆序排列
			Boolean c1 = sb1.toString().contains(line1);
			Boolean c2 = false;
			Boolean c3 = false;
			if (c1 == true) {
				String line3 = sb1.toString().substring(sb1.toString().indexOf(line1) + line1.length());
				c2 = line3.contains(line2);
				if (c2 == true) {
					c3 = true;
				}
			}

			if (b3 == true && c3 == true) {
				System.out.println("both");
			} else if (b3 == true && c3 == false) {
				System.out.println("forward");
			} else if (b3 == false && c3 == true) {
				System.out.println("backward");
			} else {
				System.out.println("invalid");
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值