美文网首页
TDD (练习) Anagrams 字符串全排列

TDD (练习) Anagrams 字符串全排列

作者: Feng_001 | 来源:发表于2020-01-06 13:03 被阅读0次
问题描述

Write a program to generate all potential
anagrams of an input string.

For example, the potential anagrams of "biro" are

biro bior brio broi boir bori
ibro ibor irbo irob iobr iorb
rbio rboi ribo riob roib robi
obir obri oibr oirb orbi orib

从描述和举例来看,该问题是字符串的全排列。

  • biro -> bior 是第二位和第三位的对调。
  • 每一个变化都是字符串中的两个字符对调位置。

下面使用TDD 的方式完成该问题,希望可以从代码看出解题过程。

测试类
public class AnagramsTest {

    Anagrams anagrams = new Anagrams();

    //     // biro bior brio broi boir bori
    @Test
    public void should_biro_bior() {
        String except = "bior";
        String input = "biro";
        String result = new String(anagrams.swap(input.toCharArray(), 2, 3));
        assertEquals(except, result);
    }

    @Test
    public void should_brio_biro() {
        String except = "brio";
        String input = "biro";
        String result = new String(anagrams.swap(input.toCharArray(), 1, 2));
        assertEquals(except, result);
    }

    @Test
    public void should_broi_bior() {
        String except = "broi";
        String input = "biro";
        String result = new String(anagrams.swap(input.toCharArray(), 1, 2));
        result = new String(anagrams.swap(result.toCharArray(), 2, 3));
        assertEquals(except, result);
    }
    @Test
    public void should_doLoop_biro(){
        String input = "biro";
        List<String> list= anagrams.potential(input.toCharArray());
        assertEquals(list, Arrays.asList("biro", "ibro", "ribo", "oirb"));
    }
    @Test
    public void should_doLoopAndcursor_biro(){
        String input = "biro";
        List<String> list= anagrams.potential(input.toCharArray(),0);
        System.out.println(list);
        list= anagrams.potential(input.toCharArray(),1);
        System.out.println(list);

    }
    @Test
    public void should_iteration_bior(){
        String input = "biro";
        List<String> list= anagrams.potential(input.toCharArray(),0);
        System.out.println(list);
    }
}
实现类
public class Anagrams {


    public char[] swap(char[] chars, int i, int j) {
        char tmp = chars[j];
        chars[j] = chars[i];
        chars[i] = tmp;
        return chars;
    }

    public List<String> potential(char[] chars) {
        List<String> result = new ArrayList<>();

        for (int i = 0; i < chars.length; i++) {
            swap(chars, 0, i);
            result.add(new String(chars));
            swap(chars, 0, i);
        }

        return result;
    }

    public List<String> potential(char[] chars, int cursor) {
        List<String> result = new ArrayList<>();

        if (cursor >= chars.length) {
            result.add(new String(chars));

        } else {
            for (int i = cursor; i < chars.length; i++) {
                swap(chars, cursor, i);
                result.addAll(potential(chars, cursor + 1));
                swap(chars, cursor, i);
            }
        }
        return result;
    }

}

相关文章

  • TDD (练习) Anagrams 字符串全排列

    问题描述 Write a program to generate all potentialanagrams of...

  • 字符串全排列

    题目描述 对给定的n位字符串全排列 解题思路 n位的字符串的全排列,先确定第0位,然后对后面n-1位进行全排列,在...

  • 关于数组的一些操作【python】

    递归的应用:求输入字符串的全排列 求输入字符串的全排列递归完成,也可以直接使用库函数 结果展示: ————————...

  • 递归算法

    问题1:给定不重复的字符串,如123,给出全排列 分析:算123的全排列,首先算以1开头的23的全排列,然后再算以...

  • 字符串全排列

    经常会遇到字符串全排列的问题。例如:输入为{‘a’,’b’,’c’},则其全排列组合为abc,acb,bac,bc...

  • 字符串全排列

    题目:https://www.nowcoder.com/practice/fe6b651b66ae47d7acce...

  • 字符串全排列

  • 字符串全排列

    题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能...

  • 字符串全排列

    题目:输入字符串,输出该字符串的全排列。样例:输入"abc",输出"abc,acb,bac,bca,cba,cab...

  • 字符串全排列

    剑指 Offer 38. 字符串的排列[https://leetcode-cn.com/problems/zi-f...

网友评论

      本文标题:TDD (练习) Anagrams 字符串全排列

      本文链接:https://www.haomeiwen.com/subject/qlxkactx.html