题目描述
小强现在可以将任何一个字符串的一位以O(1)的代价移到末尾
现在给定一个字符串S,字符串T。求问最少用几次可以将S以上述的方法移动变成T
如果不能组成 就返回-1
样例输入
acdk
ckad
样例输出
2
将a移到最后变成cdka,将d到最后变成ckad
一开始去想求 公众最长子序列,然后以字符串的长度减去这个序列长度,差点把自己写死,最后也没跑过,那时候心态有点小崩。
(而且这次笔试最后调用函数后忘记去System.out.println()了,然后自动提交都没改好,反思:写代码一定要写把模板接口给弄好)!
(后来交完卷和大家一起讨论,实际上这个题可能就是下面这么简单的思路)
思路:用贪心,t串每一个字符和s串比较,相同的位置s串打个记号,下一轮从记号处往后扫描,直到s串结束,最后总长度-t串已经扫描的长度 就是要求的结果。
不能组成的情况一定是S和T字符串中a-z中某个字符数目不一样,我们可以考虑用一个数组去检验
private static int compute( String s1,String s2){
int m=s1.length(),n=s2.length();
if (m!=n) return -1; //边界处理
int[]arr1 = new int[26];
int[]arr2 = new int[26];
for(int i=0;i<m;i++){
arr1[s1.charAt(i)-'a']++;
arr2[s2.charAt(i)-'a']++;
}
for(int i=0;