题目描述
小强现在可以将任何一个字符串的一位以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;

本文介绍了阿里笔试中的一道字符串题目,要求通过特定操作将字符串S转换为T。作者最初尝试了错误的解法,后来发现贪心策略能有效解决。在总结中,作者强调了简化思考和充分实践的重要性。
最低0.47元/天 解锁文章
329

被折叠的 条评论
为什么被折叠?



