
题目概述
Tom在期末考完试以后学习了Python语言,他发现Python语言确实是简洁又强大,在他学完字符串以后,他写了一个随机生成密码的python文件,原理是这样的,输入一个字符串s,然后系统会随机将这个s重新任意排序,然后又生成两个字符串s1和s2,并拼接起来最终生成随机密码str = s1 + s + s2。现在Tom有一个问题要问你,每次给你两个字符串,一个是s(表示输入的字符串),一个是str(表示产生的随机字符串),问这两个字符串是否符合上述要求的原理,如果符合输出YES,否则输出NO。1<=s,str<=100
输入两个字符串,一个是s,表示输入的字符串,一个是str,表示产生的随机字符串(1<=s,str<=100)
输出内容为一行字符串,如果符合题意中的原理输出”YES”,否则输出”NO”。
解题
解题方法
- 嵌套循环
算法知识
- 枚举法
解题思路
前提:
char[] s1 : 密码字符串的字符数组格式
char[] str1 : 随机生成字符串的数组格式
int[] S : 密码字符串中每个字符出现的个数。(i : 0-25)
int[] temp : S数组的备份,用于恢复S(使用clone方法获得)
count : 表示成功匹配到的密码字符的个数
将提供的字符串转换为字符数组s1和str1
用一个长度为26的int型数组对密码中各个字符出现的次数进行统计。
从第一个字符开始,对之后的挨个序列进行判断
如果s1中有这个字符, 则在S中将这个字符的个数减1(减了之后判断该字符个数是否小于0),同时将count+1
- 若减完后S中对应字符个数小于0,则表示该序列与s1不匹配,则将count重置为0, 并使用temp对S进行重置, 然后直接跳到下一个字符进行判断。
- 如果从某个字符 (str1[i]) 开始之后的一段序列的值全部为密码字符序列中的值(即count的值 = s1中字符的个数),则代表这个就是密码,可以直接输出”YES”了
如果对整个str1遍历一遍后仍找不到与s1匹配的序列, 则表示str1中没有密码, 则输出”NO”
特殊情况: 如果随机字符串str的长度小于密码字符串s的长度, 则肯定无法匹配成功, 这个时候就直接返回”NO”
时间复杂度:
空间复杂度:
