Acm +-字符串

+-字符串

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 1
描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+ 
-++--++ 
样例输出
4
来源
NBOJ
上传者

TC_周亿



思路:

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;
		}
			
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值