删除指定字符串的算法题,面试时候没做出来

很多年没来这里了。

今天上午参加了字节跳动视频面试,面试官让现场做一道算法题,有点紧张做错了。我把题目发出来,有需要的朋友看看。

题目:删除字符串
描述:给定一个字符串,不考虑大小写,将该字符串中连续的某个子串‘XXX‘删除,返回结果中不包含‘XXX‘.
例子:
输入字符串:aaaabbbbb
XXX子串:ab
输出结果:b

结束面试后,花了几分钟时间做了一下(用python语言实现)。

 1 def removeString(in_str, remove_str=‘ab‘):
 2     ret_list=[]
 3     str_len=len(remove_str)
 4     need_skip_index=-1
 5     for i, value in enumerate(in_str):
 6         if i < need_skip_index:
 7             continue
 8         elif in_str[i: i+str_len] == remove_str:
 9             need_skip_index=i+str_len
10             continue
11         else:
12             ret_list.append(value)
13             if ‘‘.join(ret_list[-str_len:]) == remove_str:
14                 ret_list = ret_list[:len(ret_list)-str_len]
15     return ‘‘.join(ret_list)
16
17 ret=removeString(‘aababc‘)
18 print(ret)

原文地址:https://www.cnblogs.com/lxg226/p/12389303.html

时间: 2024-10-09 21:04:41

删除指定字符串的算法题,面试时候没做出来的相关文章

String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。

// 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951", ""); System.out.println(phoneNum); //判断指定字符串是否包含另一字符串 String phoneNum="1795112345"; String IpNum="17951"; return phoneNum

从第一个字符串中删除指定字符串

demo: //删除str1中与str2相同的字母 var str1='stay hungry stay foolish'; var str2='she'; ------------------1正则replace()------------------------- ------------------2字符串的split和数组的join------------ for(var i=0;i<str2.length;i++){ str1=str1.split(str2[i]) .join('')

练习-文本日志增加删除(指定字符串格式)

日志格式 backend test.oldboy.orgb1 backend buy.oldboy.org import json s = '''{"backend":"%s", "record":{ "server":"%s", "weight":"%s", "maxcoon":"%s" } }''' # 显示一级菜单 def

C++求解字符串(最小子字符串,最大子字符串,删除指定字符串)

#include <iostream> #include <string.h> #define SIZE 10 #define MAXVALUE 0x7fffffff using namespace std; //题目是:求一个字符串中最小字串. //求最小字串,比求最大字串难的多,下面有我的求最大字串代码,我没有想到更好的方法,下面的这个方法虽然空间复杂度太大,可是时间复杂度是比较快的. template<typename T> struct Node { T dat

记一道数字旋转排列算法题

记一道数字旋转排列算法题 面试的时候遇到一道算法题,当时没做出来,也没有什么思路.睡觉前突然想到解法,记录一下. 题的大意如下,数字以1开始,并围绕1做逆时针旋转,其中1的坐标为(0, 0),如下图所示: 要求给一个坐标,求其未知的数是多少?例:给出(1, 0),该坐标的数为2:给出(-1, -2),该坐标上的数为22. 说下解题思路,由点的坐标可以得出目标值所在的圈数p,比如5在第2圈,p的大小为坐标x或y较大绝对值n再+1,比如18为(-2,1),绝对值n为2,则18在第3圈(n+1),然后

C++笔试面试(算法题集三)

1>    编写strcpy函数,已知函数原型char*strcpy(char* strDest,char* strSrc) ANSWER: Chat* strcpy(char* strDest,char* strSrc) { If(strSrc==NULL)  return NULL; Char*ch1=strSrc,*ch2=strDest; While(*ch1!='\0') { *ch2++=*ch1++; } *ch2='\0'; Return strDest; } 2>    用递

大公司面试经典数据结构与算法题C#解答

几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表中(也就是原链表第一个元素被插入成新链表的最后一个元素). 第二种是不需要开新的链表,而是逐步反转原链表中元素的指向,例如: 原链表是 1->2->3->4->null  被  逐步修改为 ①2->1->null.3->4->null ②3->2->

js面试中长见的算法题(转载)

js面试中长见的算法题 1.阐述下 JavaScript 中的变量提升 所谓提升,顾名思义即是 JavaScript 会将所有的声明提升到当前作用域的顶部.这也就意味着我们可以在某个变量声明前就使用该变量,不过虽然 JavaScript 会将声明提升到顶部,但是并不会执行真的初始化过程.2.阐述下 use strict; 的作用 use strict; 顾名思义也就是 JavaScript 会在所谓严格模式下执行,其一个主要的优势在于能够强制开发者避免使用未声明的变量.对于老版本的浏览器或者执行

笔试算法题(09):查找指定和值的两个数 &amp; 构造BST镜像树

出题:输入一个已经升序排序的数组和一个数字:要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n): 分析:对于升序排序的数组{-i-j-k-m--},只有可能是i+m=j+k(j和k可能是同一个数),所以可以从两边往中间收缩而忽视其他交叉相加的情况: 解题: 1 void FindSumFactor(int *array, int length, int sum) { 2 int left=0, right=length-1; 3 whil