首页 > 其他分享 >剑指offer面试题38. 字符串的排列(回溯)

剑指offer面试题38. 字符串的排列(回溯)

时间:2022-12-12 19:35:02浏览次数:72  
标签:面试题 38 offer int 回溯 flag str poi 字符串


​面试题38. 字符串的排列​

难度中等48

输入一个字符串,打印出该字符串中字符的所有排列。

 

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:


输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]


 

限制:

​1 <= s 的长度 <= 8​

解题思路:

假如这里全是不同的字母,我们可以用简单的打标记回溯的方法来解决,但是这里会有重复的字母,这就需要我们先对字符串进行排序,本次回溯选择的时候 相同的字符不要重复拿。例如:我们有排序后的字符串aabc,那么第一次我们在回溯的第一层拿了a,下次回溯回来的第一层我们应该选择b,有点抽象,我们可以看代码:

class Solution {
public:
vector<string> ans;
string tmp;
vector<int> flag;
string str;
int N;
void dfs(int level){
if(level == N){
ans.push_back(tmp);
return ;
}
int poi=0;
while(poi<N){
if(flag[poi]){
poi++;
continue;
}
tmp+=str[poi];
flag[poi] = 1;
dfs(level+1);
tmp.pop_back();
flag[poi] = 0;
int j =poi;
while(j< N && str[poi] == str[j])j++;
poi=j;
}
}
vector<string> permutation(string s) {
sort(s.begin(),s.end());
str=s;
N=s.size();
flag.assign(N,0);
dfs(0);
return ans;
}
};

 

标签:面试题,38,offer,int,回溯,flag,str,poi,字符串
From: https://blog.51cto.com/u_15910522/5931539

相关文章

  • 剑指offer 数组中的逆序对(归并排序)
    ​​剑指Offer51.数组中的逆序对​​难度困难176在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的......
  • 剑指offer 数据流中的中位数(思维,堆)
    题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值......
  • 剑指offer 字符流中第一个不重复的字符(思维,队列)
    题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“g......
  • 剑指offer 二叉搜索树的第k个结点(二叉搜索树的中序遍历)
    题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)  中,按结点数值大小顺序第三小结点的值为4。解题思路:我们知道二叉搜索树的中序遍历就是排序好的数列......
  • 剑指offer 序列化二叉树
    题目描述请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可......
  • 剑指offer 对称的二叉树(思维)
    题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:正规的解法是传入两个节点,然后判断它们是不......
  • 前端vue面试题(持续更新中)
    Watch中的deep:true是如何实现的当用户指定了watch中的deep属性为true时,如果当前监控的值是数组类型。会对对象中的每一项进行求值,此时会将当前watcher存入到对应属......
  • 前端开发系列038-基础篇之new关键字
    title:'前端开发系列038-基础篇之new关键字'tags:-javaScript系列categories:[]date:2017-10-0220:23:13本文介绍JavaScript语言中new关键字调用构造函数......
  • 前端必会react面试题及答案
    state和props触发更新的生命周期分别有什么区别?state更新流程:这个过程当中涉及的函数:shouldComponentUpdate:当组件的state或props发生改变时,都会首先触发这......
  • react面试题合集
    何为reduxRedux的基本思想是整个应用的state保持在一个单一的store中。store就是一个简单的javascript对象,而改变应用state的唯一方式是在应用中触发actions,......