此题是某公司笔试最后一题,当时时间紧张没做出来,出来后也是思索了蛮久才弄出来,可是程序似乎太繁琐,算法没选好,毫无效率可言,废话少说,题目如下:
给定一段产品的英文描述,包含M个英文单词,每个单词以空格分隔,无其他标点,再给定N个英文单词关键字。请说明思路并编程实现方法 String
extractSummary(String description,String [ ]
Keywords):目标是找出此产品描述中包含N个关键词(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出,编程语言不限。
package test;
import java.util.ArrayList;
import java.util.List;
public class FindMinSubString {
static String[] content = { "a", "c", "d", "a", "c", "b", "d", "e", "a",
"a", "b" };
static String[] key = { "b", "c", "d" };
static List<Integer> aaa = new ArrayList<Integer>();
static List<Integer> bbb = new ArrayList<Integer>();
static List<Integer> ccc = new ArrayList<Integer>();
static Integer []subInteger={0,0,0};
public static void main(String args[]) {
System.out.print("content为:");
printf(content);
System.out.print("\n" + " key为:");
printf(key);
findKey(content, key[0], aaa);
System.out.println("\n" + "关键字b在content中出现的位置 :" + aaa);
findKey(content, key[1], bbb);
System.out.println("关键字c在content中出现的位置 :" + bbb);
findKey(content, key[2], ccc);
System.out.println("关键字d在content中出现的位置 :" + ccc);
System.out.println("符合条件的最小子字符串长度为: "+findResult(aaa, bbb, ccc));
System.out.print("此子字符串为:");
for(int i=findMin(subInteger[0],subInteger[1],subInteger[2]);i<=findMax(subInteger[0],subInteger[1],subInteger[2]);i++){
System.out.print(content[i]+" ");
}
}
// 打印
static void printf(Object ary[]) {
for (int i = 0; i < ary.length; i++)
System.out.print(ary[i] + " ");
}
// 找关键字在全文的位置
static void findKey(String content[], String A, List<Integer> kkk) {
int i, j = 0;
for (i = 0; i < content.length; i++) {
if (content[i] == A) {
kkk.add(j, i);
j++;
}
}
}
// 找出三个数之间的最大差
static int findCha(int a, int b, int c) {
int max, min;
if (a > b)
max = a;
else
max = b;
if (max < c)
max = c;
if (a > b)
min = b;
else
min = a;
if (min > c)
min = c;
return max - min;
}
// 找出最小符合条件子字符串的长度
static int findResult(List<Integer> aaa, List<Integer> bbb,
List<Integer> ccc) {
int i, j, k,m;
int result = findCha(aaa.get(0), bbb.get(0), ccc.get(0));
subInteger[0]=aaa.get(0);
subInteger[1]=bbb.get(0);
subInteger[2]=ccc.get(0);
for (i = 0; i < aaa.size(); i++)
for (j = 0; j < bbb.size(); j++)
for (k = 0; k < ccc.size(); k++) {
if (result > findCha(aaa.get(i), bbb.get(j), ccc.get(k))){
result = findCha(aaa.get(i), bbb.get(j), ccc.get(k));
subInteger[0]=aaa.get(i);
subInteger[1]=bbb.get(j);
subInteger[2]=ccc.get(k);
}
}
return result + 1;
}
//找三个数中的最大值
static int findMax(int a,int b,int c){
int max;
if(a>b)max=a;
else max=b;
if(max<c)max=c;
return max;
}
//找三个数中的最小值
static int findMin(int a,int b,int c){
int min;
if(a<b)min=a;
else min=b;
if(min>c)min=c;
return min;
}
}
输出结果:
content为:a c d a c b d e a a b
key为:b c d
关键字b在content中出现的位置 :[5, 10]
关键字c在content中出现的位置 :[1, 4]
关键字d在content中出现的位置 :[2, 6]
符合条件的最小子字符串长度为: 3
此子字符串为:c b d
分享到:
相关推荐
1、给你一个字符串s,一个字符串t.返回返回s中覆盖t所有字符串的最小子串,如果s中不存在涵盖t所有字符的子串,则返回'' 2、如果s中存在这样的子串,需保证其唯一且不重复,若没有则返回''
返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 本测试数据是第265个测试用例,字符串长度100000,子串长度10000,正确的算法结果,最小覆盖子串长度应该为...
在web开发中,字符串插值是最常用的字符串操作之一。 虽然许多编程语言都提供内置的字符串插值支持,但在这个挑战中,您需要自己实现它。不允许在您选择的编程语言中使用内置的字符串插值机制。 在这个挑战中,...
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: ...
本人自己写的简单的十六进制与字符串的转换
402-字符串类的实现.mp4
##clicolor 简单地为 golang 着色 CLI 字符串。 ##用法 colorized := Colorize ( "Golang" , "white" , "blue" ) fmt . Println ( colorized ) 截屏
字符串算法面试题这个java项目用于解决网页上暴露的问题: 试题内容复制自以下网站: 如何从字符串打印重复的字符? (解决方案)首先,我们有一个简单的字符串相关编码问题,在编程面试中经常被问到。 你需要用 C、...
返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 # 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 # 示例 1: # 输入:s = "ADOBECODEBANC", t = ...
代替将字符串中的键替换为json的值。安装npm i --save substitude包括import Substitute from 'substitude'初始化new Substitute(); 或者new Substitute(/{([^{]+)}/g, false, true, true); #参数# regex: regex ...
关于C语言小子集的词法分析程序的实现: 输入:一段任意的C语言(小子集)程序(字符串) 输出:表列形式的相应属性字序列
首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括管理员的账号密码,脚本注入攻击者把SQL命令插入到WEB表单的输入域或页面请求的查询字符串,欺骗服务器...
大数据Praktikum的Flink项目的字符串相似性@ UNI Leipzig,SS2016 运行语法 预设程序 必填参数: --process default --inputCsv path/to/concept_attribute.csv 描述:导入concept_attribute.csv,仅过滤标签...
它可以正确地针对浏览器怪癖进行调整,在这种怪癖中,不带时间就解析日期字符串可以返回前一天的Date对象。 这是一个快速的浏览器控制台示例,显示了解析仅日期字符串时的怪癖: new Date('2018-04-20').toString()...
rprintf rprintf是格式化字符串的自适应生成器。 当前,它提供了一组用于在各种替换规则下构建格式化字符串的工具: sprintf C样式格式基于数字的格式基于变量的格式该软件包的主要目的是使产生所有流行样式的格式化...
从元素的计算样式中获取transform字符串,并返回 3D 矩阵的 mat4 表示。 与。 案例: matrix3d()字符串 matrix()字符串(返回 2D 矩阵的 3D 表示) none导致单位矩阵 简单的例子: var parse = require ( 'mat...
题目1 题解1 class Solution: def minSubsequence(self, nums: List[int]) -> List[int]: nums.sort(reverse=True) # 从大到小排序 sum_ = 0 res = [] for i in range(len(nums)): sum_ += nums[i] # 累加...
sty:终端的字符串样式
首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括管理员的账号密码,脚本注入攻击者把SQL命令插入到WEB表单的输入域或页面请求的查询字符串,欺骗服务器...
title: "[0076] 最小覆盖子串"题目描述给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:说明:如果