当前位置: 首页 > news >正文

广州市网站建设科技公司企业邮箱怎么注册

广州市网站建设科技公司,企业邮箱怎么注册,网络营销搜索引擎,企业网站seo诊断工具主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-字符串一、反转字符串二、反转字符串(二)三、替换空格四、翻转字符串里的单词五、左旋转字符串六、实现 strStr()七、重复的子字符串字符串中元素只能是字符String…

主要记录算法和数据结构学习笔记,新的一年更上一层楼!

初级算法-字符串

  • 一、反转字符串
  • 二、反转字符串(二)
  • 三、替换空格
  • 四、翻转字符串里的单词
  • 五、左旋转字符串
  • 六、实现 strStr()
  • 七、重复的子字符串

  • 字符串中元素只能是字符
  • String s=""是空串,String s=NULL是空白串
  • 除串s本身以外的子串都是真子串
  • 空串是任何串的子串
  • KMP算法:解决字符串匹配问题,前缀表
  • next数组,前缀不包含最后一个,后缀不包含首字母

一、反转字符串

1.题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例

示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

2.解题思路

/*** @param {character[]} s* @return {void} Do not return anything, modify s in-place instead.*/
var reverseString = function(s) {//Do not return anything, modify s in-place instead.reverse(s)
};var reverse = function(s) {let l = -1, r = s.length;while(++l < --r) [s[l], s[r]] = [s[r], s[l]];
};
// 运行时间:120ms
// 内存消耗:47.6MB

二、反转字符串(二)

1.题目
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

2.解题思路

/*** @param {string} s* @param {number} k* @return {string}*/
var reverseStr = function(s, k) {const len = s.length;let resArr = s.split(""); for(let i = 0; i < len; i += 2 * k) {  // 每隔 2k 个字符的前 k 个字符进行反转let l = i - 1, r = i + k > len ? len : i + k;while(++l < --r) [resArr[l], resArr[r]] = [resArr[r], resArr[l]];}return resArr.join("");
};
// 运行时间:80ms
// 内存消耗:43.8MB

三、替换空格

1.题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例1

输入:s = "We are happy."
输出:"We%20are%20happy."

2.解题思路

/*** @param {string} s* @return {string}*/var replaceSpace = function(s) {// 字符串转为数组const strArr = Array.from(s);let count = 0;// 计算空格数量for(let i = 0; i < strArr.length; i++) {if (strArr[i] === ' ') {count++;}}let left = strArr.length - 1;let right = strArr.length + count * 2 - 1;while(left >= 0) {if (strArr[left] === ' ') {strArr[right--] = '0';strArr[right--] = '2';strArr[right--] = '%';left--;} else {strArr[right--] = strArr[left--];}}// 数组转字符串return strArr.join('');
};
// 运行时间:60ms
// 内存消耗:41MB

四、翻转字符串里的单词

1.题目
给定一个字符串,逐个翻转字符串中的每个单词。

示例

示例 1输入: "the sky is blue"
输出: "blue is sky the"示例 2输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

2.解题思路

/*** @param {string} s* @return {string}*/var reverseWords = function(s) {// 字符串转数组const strArr = Array.from(s);// 移除多余空格removeExtraSpaces(strArr);// 翻转reverse(strArr, 0, strArr.length - 1);let start = 0;for(let i = 0; i <= strArr.length; i++) {if (strArr[i] === ' ' || i === strArr.length) {// 翻转单词reverse(strArr, start, i - 1);start = i + 1;}}return strArr.join('');
};// 删除多余空格
function removeExtraSpaces(strArr) {let slowIndex = 0;let fastIndex = 0;while(fastIndex < strArr.length) {// 移除开始位置和重复的空格if (strArr[fastIndex] === ' ' && (fastIndex === 0 || strArr[fastIndex - 1] === ' ')) {fastIndex++;} else {strArr[slowIndex++] = strArr[fastIndex++];}}// 移除末尾空格strArr.length = strArr[slowIndex - 1] === ' ' ? slowIndex - 1 : slowIndex;
}// 翻转从 start 到 end 的字符
function reverse(strArr, start, end) {let left = start;let right = end;while(left < right) {// 交换[strArr[left], strArr[right]] = [strArr[right], strArr[left]];left++;right--;}
}
// 运行时间:72ms
// 内存消耗:44.4MB   

五、左旋转字符串

1.题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例


示例 1输入: s = "abcdefg", k = 2
输出: "cdefgab"示例 2输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"限制:
1 <= k < s.length <= 10000

2.解题思路

var reverseLeftWords = function(s, n) {const length = s.length;let i = 0;while (i < length - n) {s = s[length - 1] + s;i++;}return s.slice(0, length);
};
// 运行时间:120ms
// 内存消耗:47MB
// 原字符串上操作
/*** @param {string} s* @param {number} n* @return {string}*/
var reverseLeftWords = function (s, n) {/** Utils */function reverseWords(strArr, start, end) {let temp;while (start < end) {temp = strArr[start];strArr[start] = strArr[end];strArr[end] = temp;start++;end--;}}/** Main code */let strArr = s.split('');let length = strArr.length;reverseWords(strArr, 0, length - 1);reverseWords(strArr, 0, length - n - 1);reverseWords(strArr, length - n, length - 1);return strArr.join('');
};
// 运行时间:80ms
// 内存消耗:43.3MB

六、实现 strStr()

1.题目
实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例

示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

2.解题思路

// 前缀表统一减一
/*** @param {string} haystack* @param {string} needle* @return {number}*/
var strStr = function (haystack, needle) {if (needle.length === 0)return 0;const getNext = (needle) => {let next = [];let j = -1;next.push(j);for (let i = 1; i < needle.length; ++i) {while (j >= 0 && needle[i] !== needle[j + 1])j = next[j];if (needle[i] === needle[j + 1])j++;next.push(j);}return next;}let next = getNext(needle);let j = -1;for (let i = 0; i < haystack.length; ++i) {while (j >= 0 && haystack[i] !== needle[j + 1])j = next[j];if (haystack[i] === needle[j + 1])j++;if (j === needle.length - 1)return (i - needle.length + 1);}return -1;
};
#运行时间:56ms
#内存消耗:41.1MB
// 前缀表统一不减一
/*** @param {string} haystack* @param {string} needle* @return {number}*/
var strStr = function (haystack, needle) {if (needle.length === 0)return 0;const getNext = (needle) => {let next = [];let j = 0;next.push(j);for (let i = 1; i < needle.length; ++i) {while (j > 0 && needle[i] !== needle[j])j = next[j - 1];if (needle[i] === needle[j])j++;next.push(j);}return next;}let next = getNext(needle);let j = 0;for (let i = 0; i < haystack.length; ++i) {while (j > 0 && haystack[i] !== needle[j])j = next[j - 1];if (haystack[i] === needle[j])j++;if (j === needle.length)return (i - needle.length + 1);}return -1;
};
#运行时间:72ms
#内存消耗:41MB

七、重复的子字符串

1.题目
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例

示例 1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。示例 2:
输入: "aba"
输出: False示例 3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
/*** @param {string} s* @return {boolean}*/
var repeatedSubstringPattern = function (s) {if (s.length === 0)return false;const getNext = (s) => {let next = [];let j = -1;next.push(j);for (let i = 1; i < s.length; ++i) {while (j >= 0 && s[i] !== s[j + 1])j = next[j];if (s[i] === s[j + 1])j++;next.push(j);}return next;}let next = getNext(s);if (next[next.length - 1] !== -1 && s.length % (s.length - (next[next.length - 1] + 1)) === 0)return true;return false;
};
#运行时间:76ms
#内存消耗:47.3MB
/*** @param {string} s* @return {boolean}*/
var repeatedSubstringPattern = function (s) {if (s.length === 0)return false;const getNext = (s) => {let next = [];let j = 0;next.push(j);for (let i = 1; i < s.length; ++i) {while (j > 0 && s[i] !== s[j])j = next[j - 1];if (s[i] === s[j])j++;next.push(j);}return next;}let next = getNext(s);if (next[next.length - 1] !== 0 && s.length % (s.length - next[next.length - 1]) === 0)return true;return false;
};
#运行时间:72ms
#内存消耗:47.3MB


文章转载自:
http://limeworks.crhd.cn
http://phantasmagory.crhd.cn
http://trail.crhd.cn
http://divisionism.crhd.cn
http://flute.crhd.cn
http://flowery.crhd.cn
http://turtleback.crhd.cn
http://gwine.crhd.cn
http://saccharide.crhd.cn
http://xylol.crhd.cn
http://huppah.crhd.cn
http://substantial.crhd.cn
http://compensate.crhd.cn
http://agitato.crhd.cn
http://gelatose.crhd.cn
http://imputrescibility.crhd.cn
http://remotion.crhd.cn
http://agoraphobe.crhd.cn
http://whitmonday.crhd.cn
http://diamondback.crhd.cn
http://pomology.crhd.cn
http://backwoodsy.crhd.cn
http://tamp.crhd.cn
http://sexboat.crhd.cn
http://dabber.crhd.cn
http://dhow.crhd.cn
http://macaco.crhd.cn
http://autosave.crhd.cn
http://janus.crhd.cn
http://aphony.crhd.cn
http://helot.crhd.cn
http://nonsense.crhd.cn
http://cleansing.crhd.cn
http://sugarhouse.crhd.cn
http://accelerate.crhd.cn
http://doctorand.crhd.cn
http://nakedize.crhd.cn
http://affirmant.crhd.cn
http://capitoline.crhd.cn
http://brachycranic.crhd.cn
http://previable.crhd.cn
http://patricidal.crhd.cn
http://disconcert.crhd.cn
http://radioactivate.crhd.cn
http://gelatinous.crhd.cn
http://meu.crhd.cn
http://overdesign.crhd.cn
http://gelate.crhd.cn
http://repartimiento.crhd.cn
http://alluvium.crhd.cn
http://pectize.crhd.cn
http://elaborately.crhd.cn
http://chemist.crhd.cn
http://contemptibly.crhd.cn
http://gabelle.crhd.cn
http://commoner.crhd.cn
http://molinete.crhd.cn
http://pyroxenite.crhd.cn
http://resurrect.crhd.cn
http://nomogram.crhd.cn
http://getter.crhd.cn
http://canzonet.crhd.cn
http://sibling.crhd.cn
http://ionisation.crhd.cn
http://szechwan.crhd.cn
http://flat.crhd.cn
http://packaging.crhd.cn
http://algebraist.crhd.cn
http://intransitivize.crhd.cn
http://shelly.crhd.cn
http://kaleidoscope.crhd.cn
http://aggregative.crhd.cn
http://managerialism.crhd.cn
http://refundable.crhd.cn
http://bryology.crhd.cn
http://maturely.crhd.cn
http://oswald.crhd.cn
http://hydrogenization.crhd.cn
http://commandery.crhd.cn
http://appulse.crhd.cn
http://polysynthetism.crhd.cn
http://hypocrite.crhd.cn
http://phoenix.crhd.cn
http://colourant.crhd.cn
http://froufrou.crhd.cn
http://craggedness.crhd.cn
http://studbook.crhd.cn
http://age.crhd.cn
http://irreplaceable.crhd.cn
http://rock.crhd.cn
http://damnable.crhd.cn
http://panoramic.crhd.cn
http://connivancy.crhd.cn
http://ely.crhd.cn
http://tonstein.crhd.cn
http://cyanidation.crhd.cn
http://remelting.crhd.cn
http://huffy.crhd.cn
http://zithern.crhd.cn
http://provisionality.crhd.cn
http://www.15wanjia.com/news/68786.html

相关文章:

  • 网站建设为了什么百度主页网址
  • 网站做微信支付宝支付n127网推广
  • 佛山网站开发google play官网
  • 卫浴洁具网站模板百度推广助手下载
  • 免费外贸网站模板搜索推广公司
  • 那些网站能够做推广网络营销的宏观环境
  • 温州建设诚信网站seo关键词使用
  • 重庆市公共资源交易网站长工具seo优化建议
  • wordpress4.9 多站点最简单的网页制作
  • 网站和网页的目的百度搜索入口网址
  • 做网站用的什么服务器seo单词优化
  • wordpress注册会员插件百度seo发包工具
  • 代做效果图的网站360推广助手
  • 台州集团网站建设深圳营销策划公司十强
  • 网站首页动画效果搜索引擎优化怎么做的
  • 腾讯云手动搭建wordpress个人站点杭州seo推广排名稳定
  • 山东德州网站建设哪家最专业网络推广的方法和技巧
  • 网上购物网站开发报价百度排名
  • 厦门建设厅网站app用户量排名
  • 做网站平面模板是啥意思印度疫情最新消息
  • 云技术在网站建设中的应用哈尔滨seo关键词
  • 做网站需要了解哪些知识北京seo技术交流
  • 电商网站 厦门环球网广东疫情最新消息
  • 网站首页建设网站网站排名掉了怎么恢复
  • 自己怎么做外贸网站sem优化师是做什么的
  • 济南市住建厅官方网站宁波网站优化公司推荐
  • 自己电脑做网站域名备案网络推广应该怎么做啊
  • 个人做哪方面的网站长沙专业seo优化公司
  • 如何能进腾讯做游戏视频网站seo整站优化外包公司
  • wordpress mip主题aso优化分析