算法题:字符串s1,s2,判断s1的任意排列是否是s2的子串,返回true或false

互联网 2021/4/9 1:25:09

1 package com.Liuyt;2 import java.io.FileInputStream;3 import java.io.FileNotFoundException;4 import java.util.ArrayList;5 import java.util.List;6 import java.util.Scanner;7 8 public class Main {9 public static List<String> list = new ArrayL…
 1 package com.Liuyt;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 import java.util.Scanner;
 7 
 8 public class Main {
 9     public static List<String> list = new ArrayList<String>();
10     public static void permu(char[] str) {
11         if (str == null) {
12             return;
13         }
14         permu(str, 0);
15     }
16 
17     private static void permu(char[] str, int begin) {
18         if (begin == str.length) {
19             list.add(String.valueOf(str));
20         } else {
21             for (int i = begin; i < str.length; i++) {
22                 // 首次for循环时候i=begin,即a,b,c分别和自身交换
23                 char temp = str[begin];
24                 str[begin] = str[i];
25                 str[i] = temp;
26 
27                 permu(str, begin + 1);
28                 // 采用递归调用,每次begin+1后 带入新的递归
29                 /* 交换一遍后再交换一次,能够保证最后的到的还是原数组,好办法! */
30                 temp = str[begin];
31                 str[begin] = str[i];
32                 str[i] = temp;
33             }
34         }
35     }
36 
37     public static void main(String[] args) throws FileNotFoundException {
38         Scanner sc = new Scanner(System.in);
39 
40         String input = sc.nextLine();
41         String s1 = input.split(" ")[0];
42         String s2 = input.split(" ")[1];
43 
44         if (s2.length() < s1.length() || s2 == null){
45             System.out.println("false");
46             return;
47         }else if(s1 == null && s2 == null){
48             System.out.println("true");
49         }
50         char[] s1_char = s1.toCharArray();
51         permu(s1_char);
52 
53         for (int i = 0 ;i < list.size();i++){
54             System.out.println(list.get(i));
55             if (s2.contains(list.get(i))){
56                 System.out.println("true");
57                 return;
58             }
59         }
60         System.out.println("false");
61     }
62 }

示例1:

ab dshfsjbaooo

true

示例2:

ab dsjklacbsoo

false

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[算法题:字符串s1,s2,判断s1的任意排列是否是s2的子串,返回true或false]http://www.zyiz.net/tech/detail-154078.html

上一篇:四月八号java基础

下一篇:子数组的取值范围-贪心算法

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程