替换字符串指定单词的所有异位词(回溯,全排列,字符串替换)

数据结构 专栏收录该内容
23 篇文章 0 订阅

把字符串中的单词替换掉,单词可以是异位形式的,如:
要替换you,需要把ouy,uyo,等等都替换掉。

输入:
you
i love you,ouy love me
jack

输出:
i love jack,jack love me.

思路:全排列!

import java.util.*;

public class Main1{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String old = sc.nextLine();
            String s = sc.nextLine();
            String repl = sc.nextLine();
            String res = "";
            List<String> r = new ArrayList<>();
            r = Permutation(old);
            for(int i=0;i<r.size();i++){
				s = s.replaceAll(r.get(i),repl);
            }
			System.out.println(s);
			//i love you,oyu love me
        }
    }
    public static List<String> Permutation(String str){
        List<String> ans = new ArrayList<>();
        if(str!=null || str.length()>0){
            help(0,str.toCharArray(),ans);
            Collections.sort(ans);
        }
        return ans;
    }
	public static void help(int i,char[] cha,List<String> ans){
        if(i==cha.length-1){
            String val = String.valueOf(cha);
            if(!ans.contains(val)){
                ans.add(val);
            }
        }else{
            for(int j=i;j<cha.length;j++){
                swap(i,j,cha);
                help(i+1,cha,ans);
                swap(i,j,cha);
            }
        }
    }
	public static void swap(int i,int j,char[] cha){
        char tmp = cha[i];
        cha[i] = cha[j];
        cha[j] = tmp;
    }
}
  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值