Problem

感觉和上面的题又有点像, 给一个string, 里面不能有数字。 然后所有的大写字母和非字母符号不能动, 其他的小写字母可以随意动。 输出所有的可能。
e.g. input Oh my-god!
   output Om hd-goy! Oy hm-dog! 等等。。

Solution

 1 public static List<String> permutate(String str) {
 2     List<String> res = new ArrayList<String>();
 3     if(str == null || str.length() == 0) return res;
 4
 5     StringBuffer sb = new StringBuffer(str);
 6     int[] idx = new int[str.length()];
 7
 8     int low = 'a', high = 'z';
 9     int start = 0;
10     for(int i=0; i<str.length(); i++) {
11         if(str.charAt(i) <= high && str.charAt(i) >= low) {
12             idx[start] = i;
13             start++;
14         }
15     }
16
17     System.out.println(start);
18
19     boolean[] visited = new boolean[start];
20     helper(str, res, sb, idx, visited, 0, start);
21     return res;
22 }
23
24 public static void helper(String str, List<String> res, StringBuffer sb, int[] idx, boolean[] visited, int pos, int end) {
25     if(pos == end) {
26         res.add(new StringBuffer(sb).toString());
27         return;
28     }
29
30     for(int i=0; i<end; i++) {
31         if(visited[i] == false) {
32             visited[i] = true;
33             sb.setCharAt(idx[pos], str.charAt(idx[i]));
34             helper(str, res, sb, idx, visited, pos+1, end);
35             visited[i] = false;
36         }
37     }
38 }

转载于:https://www.cnblogs.com/superbo/p/4112093.html

String Permutation相关推荐

  1. leetcode :string字符串和数字

    文章目录 01 第一个只出现一次的字符 02 左旋转字符串 03 字符串的排列 04表示数值的字符串 05把数字翻译成字符串 06 最长不含重复字符的子字符串 07 0-n-1中缺失的数字 08 数组 ...

  2. string类函数和牛客网剑指offer刷题记录

    1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...

  3. 【java学习】String字符串

    1,概念 1)String 不可变 不可变类:final,不可被继承. public final class String implements java.io.Serializable, Compa ...

  4. 剑指offer:面试题38. 字符串的排列

    题目:面试题38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输 ...

  5. 剑指offer 28:字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 解题思路 参考 ...

  6. leetcode算法题--字符串的排列

    原题链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/ vector<string> res; vector& ...

  7. 剑指offer 算法 (分解让复杂问题简单)

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 解析: 分三步: 第一步:cloneList(pHead);复制链表,每个节点后新 ...

  8. 剑指Offer之字符串的排列

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

  9. 【剑指offer28:字符串的排列】【java】

    题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. import ja ...

  10. 剑指Offer——Java答案

    第二章 面试需要的基础知识 数组 - 二维数组中查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...

最新文章

  1. CTFshow php特性 web110
  2. linux下编译wpa_supplicantnbsp;…
  3. Java方法重载与方法重写
  4. Qt Designer手册
  5. 错误: 句法分析器6行里不能有多字节字符_字节跳动iOS客户端面经第一期
  6. 【Java】java中 ==,equals,hashcode
  7. Delphi Access Violation错误的分析
  8. jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
  9. linux内核启动后键盘不能用,编译linux-0.11内核后键盘不对的问题解决方法,比如/变成了-...
  10. 智能制造的灾备问题如何解决? | 凌云时刻
  11. 嵌入式工具 | 嵌入式开发常用几款的代码编辑器
  12. 自动控制——2、为什么用微分方程来表示线性定常系统
  13. 闹钟Android实验报告,单片机实验报告(闹钟).doc
  14. 良树机器人_揭开坑王高屋良树不为人知的一面,你看过这部《冥王计划》吗?...
  15. html5做在线课件,HTML5教程:制作移动教育课件
  16. 计算机无法识别移动硬盘怎么办,电脑识别不出来移动硬盘怎么办
  17. 拼车网源码php,拼车网源码-thinkphp PHP微信拼车源码 环境要求: 服务器系统:服务器系统 推荐Linux系统 - 下载 - 搜珍网...
  18. 优美的曲线(含蝴蝶线)-CoCube
  19. matlab bsxfun
  20. 从懵懂无知到独挡一面——那些萌新程序员的进阶之路

热门文章

  1. BEEF的搭建与使用
  2. 按位与、按位异或、按位取反
  3. mcafee 8.5i杀毒软件规则配置
  4. C#学校有近千名学生,在操作上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。
  5. CDCAS: A Novel Cloud Data Center Security Auditing System
  6. cf. (E) Thematic Contests
  7. 《你的降落伞是什么颜色》
  8. 请用python写出奥运五环的绘图程序,20200929 008.海龟绘图_画出奥运五环图
  9. 10、返回当前审批流程图、后续审批按钮
  10. 20种简单美化照片PS技术