+-字符串
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
-
输入
-
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。 样例输入
-
++-+--+ -++--++
样例输出
-
4
来源
- NBOJ 上传者
思路:
1、将字符串a和字符串b分别放入linkedList中。(LinkedList操作效率快、底层链表实现)
2、将listB中的第一个字符放到listA中查找第一次出现的位置index,index即为第一个字符变换的最小次数。依次循环。若index等于-1,既没有找到,输出-1;
package ACM.greedy; import java.io.BufferedInputStream; import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class _915_1AC { public static void main(String[] args) { Scanner scan = new Scanner(new BufferedInputStream( System.in)); char[] str; char c; List<Character> lista; List<Character> listb; int number = 0,index,n; while(scan.hasNext()){ lista = new LinkedList<Character>(); listb = new LinkedList<Character>(); str = scan.next().toCharArray(); for(int i = 0; i < str.length; ++i){ lista.add(str[i]); } str = scan.next().toCharArray(); for(int i = 0; i < str.length; ++i){ listb.add(str[i]); } n = listb.size(); for(int i = 0; i < n;++i){ c = listb.get(i); index = lista.indexOf(c); if(index == -1){ System.out.println("-1"); return; } number += index; lista.remove(index); } System.out.println(number); number = 0; } } }
-
多组测试数据