(目前WA)hihocoder1264-神奇字符串-JAVA版

注意:目前该代码还是Wrong Answer,正在寻找问题所在,欢迎帮我一起寻找。

描述

我们说两个字符串是非常相似的,当且仅当它们的编辑距离小于等于1.

现在我们有两个字符串A和B, 每个单位时间你可以交换字符串A的相邻的两个字符.

问最少需要多少时间,你可以让A和B变得非常相似?保证存在一种这样的方案.

输入
第一行一个字符串,表示A.

第二行一个字符串,表示B.

所有字符串都仅有英文小写字母组成.

A和B的长度都不超过100.

输出
一行表示最少需要的时间.

样例输入

nwlrb
rclwnb

样例输出

6

整体思路:

1、 统计各个字符出现的次数,其中仅可能出现四种情况:
a) 如果B比A多一个字符,那么删除这个多出来的字符,进行后续操作。
b) 如果A比B多一个字符,则给B在各个位置尝试增加一个字符,然后进行后续操作。
c) 如果A和B长度相同,且各个字母出现次数相同,不加处理直接进行后续操作即可。
d) 如果A和B长度相同,但有两个字母出现次数不同,则有A的某个字母比B的某个字母多一个,另一个字母比B少一个,则依次尝试将B中的该字母换成另一个字母后,进行后续操作。
2、 题目给出的对A串的操作只有交换两个相邻的字符,由优化思想可以知道,如果两个相邻的字符是相同的,则没有必要交换,所以说相同的字符之间的相对顺序是不会改变的,于是当B串固定时,A串变为B串的一一对应关系是确定的,也就是说A串中第k个a一定变到B串种第k个a的位置上。这样问题就转换为求逆序对数量的问题了。第一步中的后续操作指的就是求逆序对的数量。
3、 这里的逆序对的意思是:把B看成有序的,对于任意两个字母,在A中的顺序与在B中的顺序不同,即为逆序。

代码:

import java.util.Scanner;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值