编写查询函数返回数字字符串中最大的公共前缀字符串
// **原题 14-最长公共前缀 // 思路:竖着看相不相等咯 const strArr = readline().split(','); let min = strArr[0].length; let len = 0; for (let i = 1; i < strArr.length; i++) { min = Math.min(min, strArr[i].length); } function calLen() { for (let i = 0; i < min; i++) { for (let j = 1; j < strArr.length; j++) { // 相等的传递性 if (strArr[j][i] !== strArr[j - 1][i]) { return len; } } len++; } return len; } // 切一下字符串 console.log(strArr[0].slice(0, calLen()));
//JavaScript V8 const strs = readline().split(",") if(!strs) console.log(""); //如果输入为空,自然返回空字符串 let res = strs[0]; //新建一个求两个字符串最长公共前缀的函数 const getLongestCommonPrefix = (str1, str2) => { let minLen = Math.min(str1.length, str2.length); let commonIndex = 0; while(commonIndex < minLen && str1[commonIndex] === str2[commonIndex]){ commonIndex++; } return str1.slice(0, commonIndex); } for(let i = 1; i < strs.length; i++){ //使用上面新建的函数横向扫描 res = getLongestCommonPrefix(res, strs[i]); //如果还没扫描完,res已经为空,就可以直接返回。为了减少用时,不加也可以。 if(!res.length) console.log(res); } console.log(res);
var arr = readline().split(','); var LongestPrefix = function(str) { var data = str.split(","); var res; for(let i = 0; i < data[0].length; i++) { res = data[0].slice(0, i + 1); for(let k = 0; k < data.length; k++) { if(data[k].slice(0, i + 1) !== res) return data[0].slice(0, i); } } return res; } console.log(LongestPrefix(arr[0]));
// 将字符串转换为数组,然后记录数组中的第一个字符串的每一个字符,依次判断数组总每个字符串是否都有这个字符,使用every,若返回false,则改字符串不是公共前缀字符串,则不再判断。 let commontFirstStr = function() { let arr = readline().split(","); if(arr.length) { let commont = ''; // 记录公共前缀 for(let i = 0; i < arr[0].length; i++){ let temp = arr[0][i]; // 记录第一个字符串的每一个字符 // 判断数组中的每个字符串是否有对应相同的字符 if(arr.every(el=>{ return el.charAt(i) == temp; })){ commont += temp; // 若相同及记录下相同的字符 } else { break; // 反之,不是相同的前缀字符,停止判断 } } return commont; } return ''; } console.log(commontFirstStr());
# 查找字符串中的最长公共前缀 def Solution(arr): inArr= arr for i in range(len(inArr[0])): for j in range(len(inArr)): if(inArr[j][i]!=inArr[0][i]): break else: # return inArr[0][:j] print(inArr[0][:j]) return # return '' print('') return str = input() arr = str.split(',') Solution(arr)
var longestCommonPrefix = function (strs) { if (strs == null || strs.length == 0) return ""; //默认第一个字符串是他们的公共前缀 let prefix = strs[0]; let i = 1; while (i < strs.length) { //不断的截取 while (strs[i].indexOf(prefix) != 0) { prefix = prefix.substring(0, prefix.length - 1); } i++; } return prefix; };
let line = readline() let arr = line.split(/\s+/) let res = "" for(let i = 0;i < arr[0].length;i++){ let c = arr[0][i] if(arr.every(item => item[i] === c)){ res = res + c }else{ break } } console.log(res)这用的什么测试用例啊,为什么我这个代码无法通过。
const inputStr = readline(); const arr = inputStr.split(','); // 再不传入默认值的情况下,prev指向的是index=0位置,item指向index=1位置 print(arr.reduce((prev,item)=>{ let temp = ''; for(let i =0;i<prev.length;i++){ if(prev[i] === item[i]){ temp += prev[i]; }else{ break; } } return temp; }));感谢上面老哥提示!