网速,一线互联网算法面试常用算法:字符串,沈阳市天气预报

与字符串相关的问题在各大互联网公司的书面考试和面试中呈现的频率极高。例如,网上广为流传的一道单词翻转题:输入“I am a student.”,要求输出“student. a am翟恒治 I”。

6个典型的字符串问题,别离是字符串的旋转深圳国际之窗、字符串的包括、字符串的全摆放、字符串转换成整数、回文判别、最长回文子串。这6个问题中,除了“将字符串转换成整数”这个问题需求特别注丰田坦道意细节之外,其他5个问题都有多种思路和多种解法,比方先从蛮力解法下手,然后考虑是否能逐渐优化。

一线互联网算法面试常用算法:字符串

今日咱们首要介绍字符串的旋转:

1.1 字符串的旋转

标题描绘

给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串"abcdef"的前3个字符'a'、'b'和'c'移到字美纱符串的尾部,那么原字符串将变成卖火柴的小女子故事"defabc"。请写一个函数完结此功用。

剖析与解法

解法一:蛮力移位

初看此题,或许最早想到的办法是将需求移动的字符一个一个地移到字符串的尾部。

假如界说指向该字符串的一个指针s,然后设该字符串的长度为n,那么,能够先编写一个函数LeftShiftOne (char* s, int n),以完结将一个网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报字符移到字符串尾部的功用:

void LeftShiftOne(char* s, int n)
{
  // 保存榜首个字符
  char t = s[0];
  for (int i = 英雄无敌31; i < n; i++)
  {
    s[i - 1] = s[i];
  }
  s[n -网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报 1] = t;
}

然后再调用mLeftShiftOne函数,使得字符串最初的m个字符移到字符串的尾部:

void LeftRotateString(char* s, int n, int m)
{
  while (m--)
  {
    LeftShiftOne(s安妮特海雯, n);
  }
}

这样就五常大米完结了将若干个字符移到字符串尾部的要求。

下面来剖析一下这种办法的时刻复杂度和空间复杂度。针对长度为n的字符串来说,假定需求移动m个字符到字符串的尾部,那么一共需求mn次操作。一起建立一个变量保存榜首个字符。因而,时刻复杂度为O (mn),空孕妈妈咳嗽对胎儿有影响吗间复杂度为O (1)。

有没有更好的办法来下降时刻复杂度呢?

解法二:三步回转

关于这个问题,换一个视点考虑一下。已然标题要求将字符串前面的那部分原封不动地景点移到字符串网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报的尾部,那么是否能够把需求移动的部分跟不需求移动的部分分隔处理呢?例如,能够先将一个字符串分割成两个部分,然后将这两个部分的字符串别离回转,最终再对整个字网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报符串进行全体回转,即可处理字符串旋转的问题。

拿生育险怎样报销标题中的比如来说,给定字符串"abcdef",若要将"def"移动到"abc"的前面,只需求依照下述3个过程操作即可。

(1)将原字符串分为XY两个部分,其间X为"a网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报bc",Y为"def"。

(2)将X的一切字符回转,即相当于回转"abc"得到"cba";再将Y的一切字符也回转,即相当于回转"def"得到"fed"。

(3)最终,将上述过程得到的成果再给予全体回转,即全体回转"cbafed"得到"defabc",这样,就完结了字符串的回转。官仙

参阅代码如下:

void ReverseString(char* s, int from, int to)
{
  while (from < to)
  {
    char t = s[from]叶县气候;
    s[from++] = s[to];
    s[to--] = t;
  }
}
void LeftRo践踏之tateString(结婚纪念日祝福语char* s, int n, int m)
{
  // 若要左移动大于n位,那么与%n是等价的
  m %= n;
  甄淑梅ReverseString(s, 0, m - 1);
  ReverseString(s, m, n - 1);
  R地址everseString(s, 0, n - 张文朝1);
}

这种把字符串先分为两个部分,各自倚天后传之明教复仇回转,最终全体回转的办法,俗称“三步回转”法,其时刻复杂度为O(n),空间复杂度为O(1)。

一线互联网算法面试常用算法:字符串

触类旁通

单词翻转

输入一个英文语句,翻转语句中单词的网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报次序。要求单词内字符的次序不变,语句中单词以空格符离隔。为简略起见,标点符号和一般字母相同处理。例如,若输入“I am a student.”,则输出“student. a网速,一线互联网算法面试常用算法:字符串,沈阳市气候预报 am I”。