前端基础练习题目

//判断是否为回文字符串


function reverse(arr) {
     let left = 0;
    let right = arr.length-1
    while(left < right){
        if(arr[left] != arr[right]){
            return false
        }
        left ++;
        right --;
    }return true
}
var arr = "absba"
var x = reverse(arr)
console.log(x)
第一个只出现一次的字符

function only(str) {
  const arr1 = [];
  for (let i = 0; i < str.length; i++) {
    if (arr1.indexOf(str[i]) === -1) {
      arr1.push(str[i]);
    } else {
      const index = arr1.indexOf(str[i]);
      if (index !== -1) {
        arr1.splice(index, 1);
      }
    }
  }
  return arr1[0];
}

const str = "google"; 
console.log(only(str));
最长公共前缀

function longestCommonPrefix(strs) {
  if (strs.length === 0) {
    return "";
  }

  // 将数组按照字符顺序排序
  strs.sort();
    //console.log(strs.sort());
    //['abc', 'abc', 'abca', 'abcda', 'abcdc']

  // 取出第一个和最后一个字符串
  const firstStr = strs[0];
  const lastStr = strs[strs.length - 1];

  // 比较第一个和最后一个字符串的字符
  let prefix = "";
  for (let i = 0; i < firstStr.length; i++) {
    if (firstStr[i] === lastStr[i]) {
      prefix += firstStr[i];
    } else {
      break;
    }
  }

  return prefix;
}

const input = ["abcda", "abc", "abca", "abc", "abcdc"];
const result = longestCommonPrefix(input);
console.log(result); // 输出 "abc"
//反转字符串


function reverse(str) {
    let i = 0;
    let j = str.split('').length-1
    const arr = [];
    while (i
//最长回文字符串


function getLongestPalindrome(A,n) {
	 let dp = []  
	 let max = 0
	//js初始化二维数组
	 for(let i =0;i=0;--i) {
		 for(let j =i;j
//大数加法
//描述 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
//(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)


function add(str1,str2) {
    const l1 = Number.parseInt(str1)
    const l2 = Number.parseInt(str2)
    const sum = (l1 + l2).toString()
    return sum
}
const str1 = "1"
const str2 = "22"
console.log(add(str1,str2))
//kmp算法
//描述 给你一个文本串S,一个非空模板串T,问S在T中出现了多少次


function buildPartialMatchTable(pattern) {
  const table = new Array(pattern.length).fill(0);
  let length = 0;
  let i = 1;

  while (i < pattern.length) {
    if (pattern[i] === pattern[length]) {
      length++;
      table[i] = length;
      i++;
    } else {
      if (length !== 0) {
        length = table[length - 1];
      } else {
        table[i] = 0;
        i++;
      }
    }
  }

  return table;
}

function kmpSearch(text, pattern) {
  const m = pattern.length;
  const n = text.length;
  const table = buildPartialMatchTable(pattern);

  let count = 0;
  let i = 0;
  let j = 0;

  while (i < n) {
    if (pattern[j] === text[i]) {
      i++;
      j++;
    }

    if (j === m) {
      count++;
      j = table[j - 1];
    } else if (i < n && pattern[j] !== text[i]) {
      if (j !== 0) {
        j = table[j - 1];
      } else {
        i++;
      }
    }
  }

  return count;
}

const str1 = "ababab";
const str2 = "abababab";
console.log(kmpSearch(str2, str1)); // 输出 2,"ababab" 在 "abababab" 中出现了两次
//最长重复子串
//定义重复字符串是由两个相同的字符串首尾拼接而成,例如 “abcabc"便是长度为6的一个重复字符串, 而"abcba”则不存在重复字符串。

//给定一个字符串,请返回其最长重复子串的长度。

//若不存在任何重复字符子串,则返回 0 。

//示例1

//输入: “ababc”

//返回值: 4


function repeat(str){
    if(str.lenght<=1 && str == null){
        return 0
    }
    let maxLen = Number.parseInt(str.length/2) 
	while(maxLen>0) {
		for(let  i = 0;i<=str.length-maxLen*2;++i) {
			if(str.slice(i,i+maxLen)===str.slice(i+maxLen,i+maxLen*2)) {
				return maxLen*2 
			}
		}
		maxLen--
	} 
	return 0 
    
}
const str = "ababc"
console.log(repeat(str))
//两数之和
//题目: 给定一个数组 nums 和一个目标值 target,在该数组中找出和为目标值的两个数
//输入: nums: [8, 2, 6, 5, 4, 1, 3] ; target:7
//输出: [2, 5]


function add(arr,target) {
    let map= {}
    for(let i = 0 ;i < arr.length; i++){
      if (map[target - arr[i]] !== undefined) {
        return [target - arr[i], arr[i]];
      } else {
        // 条件不成立,将该值存起来
        map[arr[i]] = i;
      }
    }
}
const arr = [8, 2, 6, 5, 4, 1, 3] 
const target = 7
console.log(add(arr,target))

你可能感兴趣的:(前端面试常见题目,前端,javascript,开发语言)