华为OD机试-字符串解密
给定两个字符串string1和string2。
string1是一个被加扰的字符串。string1由小写英文字母('a'~'z')和数字字符('0'~'9')组成,而加扰字符串由'0'~'9'、'a'~'f'组成。string1里面可能包含0个或多个加扰子串,剩下可能有0个或多个有效子串,这些有效子串被加扰子串隔开。
string2是一个参考字符串,仅由小写英文字母('a'~'z')组成。
你需要在string1字符串里找到一个有效子串,这个有效子串要同时满足下面两个条件:
(1)这个有效子串里不同字母的数量不超过且最接近于string2里不同字母的数量,即小于或等于string2里不同字母的数量的同时且最大。
(2)这个有效子串是满足条件(1)里的所有子串(如果有多个的话)里字典序,最大的一个。
如果没有找到合适条件的子串的话,请输出"Not Found"
示例:
输入字符串string1为"thisisanewday111forme",输入字符串string2为"good"。
string1里有效子串和加扰子串分割后可表示为:"thisis"+"a"+"n"+"e"+"w"+"da"+"y"+"111f"+"orm"+"e",去除加扰子串("a"、"e"、"da"、"111f"、"e")后的有效子串候选为("thisis","n","w""y","orm")。
输入字符串string2里不同字母的数量为3('g'、'o'、'd'),从有效子串候选里可以找出"orm"满足要求,其不同字母的数量为3,最接近于string2不同字母的数量。
输入描述:
input_string1 input_string2
说明:输入为两个字符串,第1行是题目里的string1(被加扰的字符串),第2行是题目里的strinq2(参考字符串)
输出描述:
output_string
说明:输出为一个字符串(有效字符串)补充说明:
输入字符串string1的长度在1~100000之间,string2的长度在1~500之间
示例1
输入:
123admyffc79pt
ssyy
输出:
pt
说明:
将输入字符串1里的加扰子串"123ad"、"ffc79"去除后得到有效子串序列:"my"、"pt",其中"my"里不同字母的数量为2(有'm'和'y'两个不同字母),"pt"里不同字母的数量为2(有'p'和't'两个不同字母);输入字符串2里不同字母的数量为2(有's'和'y'两个不同字母)。
可得到最终输出结果为"pt",其不同字母的数量最接近于"ssy"里不同字母的数量的同时字典序最大。
示例2
输入:
123admyffc79ptaagghi2222smeersst88mnrt
ssyyfgh
输出:
mnrt
说明:
将输入字符串1里的加扰子串"123ad","ffc79","aa","2222","ee","88"去除后得到有效子串序列:"mv"、"pt"、"aahi"、"sm"."rsst""mnrt":输入字符串2里不同字母的数量 5(有's'、'v''f、'a'、'h'5个不同字母)。可得到最终输出结果为"mnrt",其不同字母的数量(为4)最接近干"ssvvfah"里不同字母的数量,其他有效子串不同字母的数量都小于"mnrt"。
示例3
输入:
abcmnq
rt
输出:
Not Found
说明:
将输入字符串1里的加扰子串"abc"去除后得到有效子串序列:"mna":输入字符串2里不同字母的数量为2(有”"两个不同的字母)。可得到最终的输出结果为"Not Found",没有符合要求的有效子串,因有效子串的里不同字母的数量(为3),大于输入字符串2里的不同字母的数量
————————————————
版权声明:本文为CSDN博主「MISAYAONE」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://renjie.blog.csdn.net/article/details/128455555
Java 实现:https://renjie.blog.csdn.net/article/details/128455555
Python实现:https://renjie.blog.csdn.net/article/details/128455537
C++ 实现:https://renjie.blog.csdn.net/article/details/128455527
JavaScript实现:https://renjie.blog.csdn.net/article/details/128995745
C语言版本持续更新中