前端编程练习1
1、无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { var res=0; //用于存放当前最长无重复子串的长度 var str=""; //用于存放无重复子串 var n=s.length; for(var i=0;i<n;i++){ var char=s.charAt(i);//返回i位置的字符 var index = str.indexOf(char); // //不重复时 if(index==-1){ str+=char; res=res<str.length?str.length:res; } //已重复 else{ str=str.substr(index+1)+char } } return res;//返回长度 };
2、最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
/** * @param {string[]} strs * @return {string} */ var longestCommonPrefix = function(strs) { //思路 //1、字符串数组空,直接返回空字符串 //2、字符串数字只有一项,直接返回该字符串 //3、如果字符串数组有多项,我们可以先取得第一项,然后再依次将第一项字符串的每个字符与后面每一个字符串的相应位置的字符进行比较;
如果有不同,就不再进行后续判断,而是直接返回结果即可;如果在这一轮迭代中相应位置的字符相同,则记录下来。 var res=""//返回字符串结果 var firstStr=strs[0];//字符串数组第一项 //1、空数组 if(!strs.length){ return res; } //非空数组 //两层循环,每一次外层循环都可以得到一个相同的字符串 for(var i=0;i<firstStr.length;i++){ for(var j=1;j<strs.length;j++){ if(firstStr[i]!=strs[j][i]){ return res; } } res+=firstStr[i]; } return res; };