首页 > 其他分享 >【剑指Offer】27、字符串的排列

【剑指Offer】27、字符串的排列

时间:2023-06-28 23:45:04浏览次数:37  
标签:字符 27 Offer res 排列 str 字符串

【剑指Offer】27、字符串的排列

题目描述:

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

输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

解题思路:

对于这个问题,我们同样可以采用分解的办法。要求整个字符串的排列,可以看成两步:第一步:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换。第二步:固定一个字符,求后面所有字符的排列。

很明显,求后面所有字符的排列,我们仍然可以把所有的字符分成两个部分:后面的字符的第一个字符以及这个字符之后的所有字符,然后把第一个字符逐一与其后的字符交换。因此,这是典型的递归思路。

举例:

编程实现(Java):

import java.util.*;
public class Solution {
    ArrayList<String> res=new ArrayList<>();
    public ArrayList<String> Permutation(String str) {
       if(str==null||str.length()==0)
           return res;
       Permutation(str.toCharArray(),0);
       Collections.sort(res);
       return res;
    }
    public void Permutation(char[] strArr,int begin){
        if(begin==strArr.length-1){
            String s=String.valueOf(strArr);
            if(!res.contains(s))
                res.add(s);
        }else{
            for(int i=begin;i<strArr.length;i++){ //依次将后面的与begin交换
                swap(strArr,begin,i);
                Permutation(strArr,begin+1);
                swap(strArr,begin,i);
            }
        }
    }
    public void swap(char[] strArr,int a,int b){
        char temp=strArr[a];
        strArr[a]=strArr[b];
        strArr[b]=temp;
    }
}

标签:字符,27,Offer,res,排列,str,字符串
From: https://www.cnblogs.com/bujidao1128/p/17512841.html

相关文章

  • 【剑指Offer】2、替换空格
    【剑指Offer】2、替换空格题目描述:  请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:  对于这个题目,我们首先想到原来的一个空格替换为三个字符,字符串长度会增加,因此,存在以下两种......
  • 2023-06-28:你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.le
    2023-06-28:你想要用小写字母组成一个目标字符串target。开始的时候,序列由target.length个'?'记号组成而你有一个小写字母印章stamp。在每个回合,你可以将印章放在序列上,并将序列中的每个字母替换为印章上的相应字母你最多可以进行10*target.length个回合举个例子,如......
  • 2023-06-28:你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.le
    2023-06-28:你想要用小写字母组成一个目标字符串target。开始的时候,序列由target.length个'?'记号组成而你有一个小写字母印章stamp。在每个回合,你可以将印章放在序列上,并将序列中的每个字母替换为印章上的相应字母你最多可以进行10*target.length个回合举个例子,如果初始......
  • 剑指 Offer 58 - I. 翻转单词顺序
    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"Iamastudent.",则输出"student.aamI"。示例1:输入:"theskyisblue"输出: "blueisskythe"示例2:输入:" helloworld! "输出: "worl......
  • uva 10878(字符串)
    题目:"Machinestakemebysurprisewithgreatfrequency."AlanTuringYourbosshasjustunearthedarollofoldcomputertapes.Thetapeshaveholesinthemandmightcontainsomesortofusefulinformation.Itfallstoyoutofigureoutwhatisw......
  • AtCoder Beginner Contest 227 H Eat Them All
    洛谷传送门AtCoder传送门好奇特的题。考虑显式建图,那么这是一个\(9\)个结点,\(12\)条边的图,需要找到一条回路使得第\(i\)个点被经过\(a_i\)次。首先会有一个基本思路:先求出每条边经过的次数,然后每条边复制这么多次即可直接构造欧拉回路。其中每条边经过次数的限制就是,......
  • php php截取指定两个字符之间字符串,默认字符集为utf-8
    /**php截取指定两个字符之间字符串,默认字符集为utf-8Powerby大耳朵图图@paramstring$begin开始字符串@paramstring$end结束字符串@paramstring$str需要截取的字符串@returnstring*/publicfunctioncut($begin,$end,$str){$b=mb_strpos($str,$begin)+mb......
  • JavaScript-常用字符串方法和属性
    JavaScript-常用字符串方法和属性charAt()//返回指定位置处的字符。charCodeAt()//返回指定位置处字符编码。codePointAt()//返回字符串中索引(位置)处的Unicode值。concat()//返回两个或多个连接的字符串。constructor返回字符串的构造函数。endsWith()//返回......
  • Shuffle Cards (牛客多校) (rope 块状链表 用作可持续优化平衡树, 用于区间的整体移动
    rope:#include<ext/rope>usingnamespace__gnu_cxx; 定义方法:rope<变量类型>变量名称;人话解释:超级string算法解释:块状链表(即讲链表与数组的优势结合,形成分块思想)用途解释:这本来是一个用于快速操作string的工具,却一般被定义成int,然后用作可持久化线段树!insert(intpos,s......
  • JS中字符串28种常用API总结,substring、slice、JSON.stringify、match、split、search
    一、引言在前端开发中,处理字符串是一项常见的任务。JavaScript提供了一系列的字符串API,用于操作和处理字符串数据。字符串常用的API方法有很多,包括查找字符串、截取字符串、替换字符串、分割字符串、大小写转换、字符串拼接和字符串比较等等。本文将介绍一些常用的字符串API......