大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 8道經典數組和字符串面試題

8道經典數組和字符串面試題

更新時間:2020-10-19 17:53:06 來源:動力節點 瀏覽1312次

本文主要為大家介紹8道經典數組和字符串經面試題,可以作為大家求職面試題的磨刀石。這8道數組和字符串面試題主要是數組和字符串相關的在面試中出現頻率較高的面試題,希望能夠給小伙伴們的面試帶來一點點幫助。


1.棧的壓入和彈出 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列5,4,3,2,1或3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。function IsPopOrder(pushV,popV){

if(pushV.length === 0) return false;

var stack = []; // 模擬棧

for(var i = 0, j = 0; i < pushV.length;){

stack.push(pushV[i]);

i += 1;

// 壓入棧的值需要被彈出

while(j < popV.length && stack[stack.length-1] === popV[j]){

stack.pop();

j++;

if(stack.length === 0) break;

}

}

return stack.length === 0;

}


2.利用棧模擬隊列思路:對棧A添加數據。如果棧B為空,循環將棧A中內容彈出放入棧B,并彈出棧B最后一項如果棧B不為空,則直接彈出棧B的最后一項ar stackA = [];

var stackB = [];

function push(node){

stackA.push(node);

}

function pop(){

if(!stackB.length){

while(stackA.length){

stackB.push(stackA.pop());

}

}

return stackB.pop();

}


3. 找出連續最長不重復字符串在一個字符串中找出連續的不重復的最大長度的字符串,解決這類問題的思路:利用循環疊加字符串,直到出現重復為止每一次疊加,記錄下來最大長度的字符串// 連續最長不重復字符串

function getMaxLenStr(str) {

var cur = [];

var maxLenStr = '';

for(var i = 0; i < str.length; i++) {

if(!cur.includes(str[i])) {

cur.push(str[i]);

} else {

cur = []; // 置為空

cur.push(str[i]);

}

// 存儲最大長度的字符串

if(maxLenStr.length < cur.length) {

maxLenStr = cur.join('');

}

}

return maxLenStr;

}

getMaxLenStr('ababcabcde'); // abcde

方法二:var str = "aababcabcdeabcdefaababc";

var x = str.split('').reduce((a, b, index) => {

if(a.indexOf(b) !== -1) {

return a;

}

a.push(b);

return a;

}, []).join('');

console.log(x)

方法三:var s = "aababcabcdeabcdefaababc";

var lengthOfLongestSubstring = function(s) {

var str = ""; // 用于存放無重復字符串

var arr = [];

for(var i = 0; i < s.length; i++) {

var char = s.charAt(i);

var index = str.indexOf(char);

if(index === -1) {

str += char;

arr.push(str);

} else {

str = str.substr(index + 1) + char;

}

}

return arr.reduce((a, b) => {

return b.length > a.length ? b : a;

}, '');

};

console.log(lengthOfLongestSubstring(s));


4. 求一個數組當中,連續子向量的最大和。function FindGreatestSumOfSubArray(arr) {

let sum = arr[0];

let max = arr[0];

for(let i = 1; i < arr.length; i++) {

if(sum < 0) {

sum = arr[i];

}else{

sum += arr[i];

}

// 記錄最大值

if(max < sum) {

max = sum;

}

}

return max;

}


5. 給定一個編碼字符,按編碼規則進行解碼,輸出字符串 編碼規則:coount[letter] ,將letter的內容count次輸出,count是0或正整數,letter是區分大小寫的純字母。實例:const s= 3[a]2[bc]; decodeString(s); // 返回'aaabcbc'const s= 3[a2[c]]; decodeString(s); // 返回 'accaccacc' const s= 2[ab]3[cd]ef; decodeString(s); // 返回 'ababcdcdcdef'思路: 使用棧這種數據結構,如果 push 的內容為‘]’,則循環 pop 字符,直到碰到 ’[‘,然后將pop 出來的字符串按規則整理后,重新 push 進棧中,最后將棧內的內容拼接成字符串輸出即可。

方法1:function decodeString(str) {

let stack = []; // 存儲字符串的棧

for (let i = 0; i < str.length; i++) {

let cur = str[i];

if (cur !== ']') {

stack.push(cur);

} else { // 彈出

let count = 0;

let loopStr = [];

let popStr = '';

while ((popStr = stack.pop()) !== '[') {

loopStr.unshift(popStr);

}

count = stack.pop();

// 添加結果

let item = '';

for (let i = 0; i < count; i++) {

item += loopStr.join('');

}

stack.push(...(item.split('')));

}

}

return stack.join('');

}

方法2:const str = '3[a]2[bc]';

function decodeString(str) {

let Counts = str.split(/\[[a-zA-Z]+\]/);

let Letters = str.match(/[a-zA-Z]+/g);

let newString = "";

Letters.forEach((item,index)=>{

for (var n=0;n<counts[index];n++) p="" {<="">

newString += item;

}

})

return newString;

}

console.log(decodeString(str))


6. 實現一個方法,限定數組中元素出現的次數,第一個參數為數組,第二個參數為限制數組中元素出現的最多次數;要求不改變原素組的順序;例如:deleteNth((1, 1 1, 1), 2); //return [1, 1]

deleteNth((20, 37, 34, 20, 20, 37), 2); //return [20, 37, 34, 20, 37];復制代碼方法1:var arr = [4, 4, 4, 4, 3, 3, 3, 3, 1, 2, 4, 3, 90];

function deleteNth(arr, n) {

var newArr = [];

for (var i = 0; i < arr.length; i++) {

if (newArr.indexOf(arr[i]) == -1) {

newArr.push(arr[i]);

}

}

for (var i = 0; i < newArr.length; i++) {

var sum = 0;

for (var j = 0; j < arr.length; j++) {

if (arr[j] == newArr[i]) {

sum ++;

if (sum > n) {

arr.splice(j, 1);

j--;

}

}

}

}

return arr;

}

console.log(deleteNth(arr, 2))復制代碼方法2:var arr = [1, 1, 2, 5, 23, 23, 1, 1];

function deleteNth(arr, n) {

let newArr = arr.map( item => {

return item;

})//原始數據副本

let newArr1 = [];//處理后的數據

for (var i = 0; i < newArr.length; i++) {

if (newArr1.indexOf(newArr[i]) < 0) {

newArr1.push(newArr[i]);

} else if (newArr1.indexOf(newArr[i]) > -1) {

let hasIndexArr = [];//用于存放相匹配的項的索引

for (let j = 0; j < newArr1.length; j++) {

if (newArr1[j] == newArr[i]) {//將匹配的項的索引扔進hasIndexArr

hasIndexArr.push(j);

}

}

if (hasIndexArr.length < n) {//如果數量還不滿足n,扔進去

newArr1.push(newArr[i]);

}//如果數量已經滿足,則跳過

}

}

return newArr1;

}

console.log(deleteNth(arr,1))復制代碼方法3:var arr = [4, 4, 4, 4, 3, 3, 3, 3, 1, 2, 4, 3, 90];

var cache = {};

function deleteNth(arr, x) {

return arr.filter(function (n) {

cache[n] = (cache[n]||0) + 1;

return cache[n] <= x;

})

}

console.log(deleteNth(arr, 1))


7. 實現一個方法,于數組中尋找某個值作為分割的界點,使得該值左右兩邊的數相加相等[1, 2, 3, 4, 3, 2, 1] => 返回下標3

[1, 100, 50, -51, 1, 1] => 返回下標1復制代碼方法1:var arr = [1, 2, 3, 4, 3, 2, 1];

function find (arr) {

var sum1 = 0;

for (var i = 0 ; i < arr.length ; i ++) {

sum1 += arr[i];

var sum2 = 0;

for (var j = i + 2 ; j < arr.length ; j ++) {

sum2 += arr[j];

}

if (sum1 == sum2) {

return i + 1;

} else if (i == arr.length - 3 && sum1 !== sum2) {

return "該值不存在";

}

}

}

console.log(find(arr))復制代碼方法2:var arr = [1, 2, 3, 4, 3, 2, 1];

for (var i = 0 ; i < arr.length - 2 ; i ++) {

var arr1 = arr.slice(0, i+1);

var arr2 = arr.slice(i+2);

var sum1 = sum2 = 0;

for (var m = 0 ; m < arr1.length ; m ++) {

sum1 += arr1[m];

}

for (var n = 0 ; n < arr2.length ; n ++) {

sum2 += arr2[n];

}

if (sum1 == sum2) {

console.log(i + 1);

break;

} else if (i == arr.length - 3 && sum1 !== sum2) {

console.log("該值不存在");

}

}


8. 自定義事件 var content = document.querySelector('.content');

// 自定義事件

var evt = new Event('custom');

var customEvt = new CustomEvent('customEvt', {

// 通過這個屬性傳遞參數

detail: {

name: 'tom',

age: 12

}

});

content.addEventListener('custom', (e) => {

console.log('自定義事件被觸發,無參數...');

console.log(e);

});

content.addEventListener('customEvt', (e) => {

console.log('自定義事件被觸發,有參數...');

console.log(e);

console.log(e.detail);

});

// 點擊時觸發這個自定義事件

content.addEventListener('click', (e) => {

content.dispatchEvent(evt);

content.dispatchEvent(customEvt);

});


小伙伴們可以拿上面的8道題數組和字符串面試題小試牛刀,檢驗一下自己學習Java的真實水平。如果覺得題目太少也沒關系,本站的Java面試題庫里有著海量的面試好題,是Java程序員面試刷題必備的哦。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久国产精品麻豆映画 | 91啪国自产在线高清观看 | 亚洲精品高清国产一线久久97 | 99热国产在线观看 | 天天干天天拍 | 国产免费爱在线观看视频 | 亚洲 国产 路线1路线2路线 | 夜夜嘿视频免费看 | 亚洲欧美不卡中文字幕 | 香蕉亚洲 | 国产全黄a一级毛片 | 国内精品久久久久影院嫩草 | 九九热精品免费视频 | 日韩99精品 | 亚洲精品福利视频 | 国产视频97 | 久久一本精品 | 青青草免费视频在线播放 | 国产大片中文字幕在线观看 | 免费国产一区 | 欧美jizz40性欧美 | 一级大片免费观看 | 欧美精品网 | 奇米网在线视频 | 综合在线视频精品专区 | 日本一二三区视频 | 欧美91精品久久久久网免费 | 黄网站www| 99视频免费看 | 久久综合九色综合97婷婷女人 | 狼狼色丁香久久女婷婷综合 | 亚洲 欧美精品 | 国产精品自在线拍国产 | 日日拍夜夜嗷嗷叫狠狠 | 国产你懂得 | 国产精品伦一区二区三级视频 | 精品免费国产一区二区三区 | www干| 美女羞羞视频 | 四虎国产精品4hu永久 | 欧美视频一区二区三区在线观看 |