描述
一天小明和小红在玩单词混合的游戏,游戏的规则是按顺序给出3个单词,判断第3个单词是否能够由前两个单词中的所有字母混合而成。
前两个单词可以任意混合,但是混合后,原本两个单词中的字符前后顺序必须与原单词中的顺序保持一致。
输入
输入的第一行为一个正整数n(1<=n<=1000),表示测试样例的个数。 接下来n行,每行输入输入3个字符串,字符串之间由一个空格分隔,所有的字符串仅由英文大小写字母组成,区分大小写,即'A' != 'a'。
输入数据保证第3个字符串的长度是前两个字符串长度之和,前两个字符串的长度范围是[1,200]。
输出
对于每个输入样例,首先输出“Case N: ”,N表示样例序号,从1开始。 如果第3个单词能够按照要求由前两个单词中的所有字母混合而成,则紧接着输出“yes”,否则输出“no”。
样例输入1
3
cat tree tcraete
cat tree catrtee
cat tree cttaree
样例输出1
Case 1: yes
Case 2: yes
Case 3: no
import java.util.Scanner; //深度优先搜索 public class Main { static String word1,word2,mixWord; static int lengthm,length1,length2; //将混合字符串逐个字母与单词1单词2当前字母比较 public static boolean compare(int w1,int w2,int mW) { int i; for (i = mW; i < lengthm; i++) { char chm = mixWord.charAt(i); //计算相等个数的计数器 int count = 0; if (w1 < length1 && chm == word1.charAt(w1)) count++; if (w2 < length2 && chm == word2.charAt(w2)) count++; //如果一个相等的都没有为假 if (count == 0) break; //如果只等于单词1,将单词1下标加1 else if (count == 1 && w1 < length1 && chm == word1.charAt(w1)) w1++; //如果只等于单词2,将单词2下标加1 else if (count == 1 && w2 < length2 && chm == word2.charAt(w2)) w2++; //如果两个都等于,选能走到最后的,搜索开始 else { if (compare(w1 + 1, w2, i + 1)) return true; if (compare(w1, w2 + 1, i + 1)) return true; //都走不到最后为假 return false; } } if (i == lengthm) return true; else return false; } public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int num = 1; while (num <= n) { word1 = input.next(); word2 = input.next(); mixWord = input.next(); lengthm = mixWord.length(); length1 = word1.length(); length2 = word2.length(); if (compare(0, 0, 0)) System.out.println("Case " + num + ": yes"); else System.out.println("Case " + num + ": no"); num++; } } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复