[编程挑战]交替字符串,仅供参考

来源:互联网 发布:淘宝双十一抽奖在哪里 编辑:程序博客网 时间:2024/05/21 11:18
package com.zq.challenge;/** * 如果字符串str3能够由str1和str2中的字符按顺序交替形成,那么称str3为str1和str2的交替字符串。 * 例如str1="abc",str2="def",那么"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都为 * str1和str2的交替字符串。更形式化的,str3的生成算法如下: str3="" while str1不为空 or str2不为空:   * 把str1或str2的首字符加入到str3,并从str1或str2中删除相应的字符 end 给定str1, str2,和str3, * 判断str3是否为str1和str2的交替字符串。 输入格式: 多组数据,每组数据三行,分别是str1,str2,str3。str1, * str2的长度在[1..100]范围内,str3的范围在[1..200]范围内。字符串只包含小写英文字母。 输出格式:  * 每组数据输出一行YES或者NO。 * @author kk * */public class ChangeStrTest {public static void main(String[] args) {String str1 = "abc";String str2 = "def";String str3 = "abcdef"; //trueString str4 = "abdecf"; //trueString str5 = "adbecf"; //trueString str6 = "adbbec"; //falseSystem.out.println(judgeIntersect(str1,str2,str3));System.out.println(judgeIntersect(str1,str2,str4));System.out.println(judgeIntersect(str1,str2,str5));System.out.println(judgeIntersect(str1,str2,str6));String str7 = "abcd";String str8 = "adce";String str9 = "abacddce"; //trueString str10 = "abacddcef"; //falseString str11 = "abacddc"; //falseString str12 = "aadbcdce"; //trueSystem.out.println(judgeIntersect(str7,str8,str9));System.out.println(judgeIntersect(str7,str8,str10));System.out.println(judgeIntersect(str7,str8,str11));System.out.println(judgeIntersect(str7,str8,str12));}public static boolean judgeIntersect(String str1,String str2, String str3){if(str1.length()+str2.length() != str3.length()){return false;}char []str1Array = str1.toCharArray();char []str2Array = str2.toCharArray();char []str3Array = str3.toCharArray();return judgeInterset(str1Array,str2Array,str3Array,0,str1Array.length-1,0,str2Array.length-1,0,str3Array.length-1);}public static boolean judgeInterset(char []str1Array, char[] str2Array, char []str3Array,int str1Start, int str1End,int str2Start, int str2End,int str3Start, int str3End){if(str1Start > str1End){if(str2End - str2Start != str3End - str3Start){return false;}else{for(int i=0; i<=str2End-str2Start; i++){if(str2Array[str2Start+i] != str3Array[str3Start+i]){return false;}}return true;}}else if(str2Start > str2End){if(str1End - str1Start != str1End - str1Start){return false;}else{for(int i=0; i<=str1End-str1Start; i++){if(str1Array[str1Start+i] != str3Array[str3Start+i]){return false;}}return true;}}if(str1End-str1Start + str2End - str2Start+1 != str3End - str3Start){return false;}if(str1Array[str1Start] == str2Array[str2Start]){if(str1Array[str1Start] == str3Array[str3Start]){return judgeInterset(str1Array,str2Array,str3Array,str1Start+1,str1End,str2Start,str2End,str3Start+1,str3End)|| judgeInterset(str1Array,str2Array,str3Array,str1Start,str1End,str2Start+1,str2End,str3Start+1,str3End);}}else if(str1Array[str1Start] == str3Array[str3Start]){return judgeInterset(str1Array,str2Array,str3Array,str1Start+1,str1End,str2Start,str2End,str3Start+1,str3End);}else if(str2Array[str2Start] == str3Array[str3Start]){return judgeInterset(str1Array,str2Array,str3Array,str1Start,str1End,str2Start+1,str2End,str3Start+1,str3End);}return false;}}

0 0
原创粉丝点击