//判断是否为回文字符串
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))