`
加州板栗
  • 浏览: 26595 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

找最小子字符串

阅读更多

此题是某公司笔试最后一题,当时时间紧张没做出来,出来后也是思索了蛮久才弄出来,可是程序似乎太繁琐,算法没选好,毫无效率可言,废话少说,题目如下:

   给定一段产品的英文描述,包含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

分享到:
评论

相关推荐

    java 用递归实现字符串反转

    ### Java使用递归实现字符串反转 在Java编程语言中,递归是一种常用的方法来解决许多问题,特别是那些可以通过分解成更小子问题来解决的问题。本文将详细介绍如何使用递归来实现字符串的反转。 #### 一、递归基础...

    练习SCL写函数块处对字符串进行处理,查找一个字符串内涵盖另一个字符串所有字符的最小的字符串

    在PLC编程中,SCL(Structured Text)是一种高级编程语言,用于编写复杂的逻辑和算法。...通过实践和调试,我们可以创建一个功能完善的函数块,有效地找出字符串s中涵盖字符串t所有字符的最小子串。

    Python字符串连接:技巧与最佳实践

    字符串是编程中最常见的数据类型之一,它们是字符的序列。在Python中,字符串的连接是一个基本而重要的操作,它允许我们将两个或多个字符串合并成一个单一的字符串。本文将详细介绍Python中字符串连接的多种方法,...

    LeetCode:最小覆盖子串测试用例,10W长度字符串1W长度子串

    返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 本测试数据是第265个测试用例,字符串长度100000,子串长度10000,正确的算法结果,最小覆盖子串长度应该为...

    十六进制与字符串的转换

    在计算机科学中,十六进制(Hexadecimal)和字符串是两种常见的数据表示方式。十六进制是一种基数为16的计数系统,常用于表示二进制数据,因为每个十六进制数字可以代表四位二进制数。字符串则是由一个或多个字符...

    工具-Java-字符串模板插值-示例

    在web开发中,字符串插值是最常用的字符串操作之一。 虽然许多编程语言都提供内置的字符串插值支持,但在这个挑战中,您需要自己实现它。不允许在您选择的编程语言中使用内置的字符串插值机制。 在这个挑战中,...

    c语言数据结构字符串模式匹配算法.zip

    KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: ...

    Shortest-Substring-Python:获取包含初始字符串“ B”的所有字符的字符串“ B”的最短子字符串“ A”

    这个解决方案在最坏情况下的时间复杂度是O(n),其中n是字符串A的长度,因为我们只需要遍历一次字符串A。空间复杂度也是O(min(n, m)),其中m是字符串B的长度,因为集合B_set的大小不会超过m。 在实际应用中,这个...

    402-字符串类的实现.mp4

    402-字符串类的实现.mp4

    js代码-最长公共字符串

    这个问题的基本目标是从一组字符串中找出最长的那个共同子串,即所有字符串都包含的相同部分。这个概念广泛应用于文本分析、生物信息学以及软件工程等多个领域。 在`main.js`文件中,我们可能找到了一个实现这个...

    smallest-window:在包含另一个字符串的所有字符的字符串中找到最小的窗口(http

    标题 "smallest-window" 指的是一个编程问题,它要求在给定的字符串中找到一个最小子串,这个子串包含另一个字符串的所有字符。这是一个经典的字符串处理问题,常常出现在算法竞赛或者面试中,用于考察程序员对字符...

    乘法表问题.docx

    总之,乘法表问题的解决方案是通过动态规划方法,利用最优子结构和子问题重叠的特性,计算字符串的加括号方式数,以满足特定乘法表下的表达式值为a。通过构建和填充状态数组,我们可以有效地解决这个问题,避免了...

    多种字符串相似度算法的比较研究.doc

    - 算法思想:贪心地寻找最小子串,使得该子串重复出现,覆盖整个字符串。 - 实例:对于字符串"ABABAB",贪心算法可能会找到子串"A"和"B",因为它们可以重复覆盖整个字符串。 - 时间复杂度:取决于具体实现,但...

    clicolor:简单地为 golang 着色 CLI 字符串

    ##clicolor 简单地为 golang 着色 CLI 字符串。 ##用法 colorized := Colorize ( "Golang" , "white" , "blue" ) fmt . Println ( colorized ) 截屏

    string-interview-questions:求职面试中可能出现的与字符串算法相关的问题

    字符串算法面试题这个java项目用于解决网页上暴露的问题: 试题内容复制自以下网站: 如何从字符串打印重复的字符? (解决方案)首先,我们有一个简单的字符串相关编码问题,在编程面试中经常被问到。 你需要用 C、...

    C语言小子集的词法分析程序的实现

    C语言小子集可能包括关键字(如`if`、`else`、`while`等)、标识符(由字母、数字和下划线组成)、常量(整型、浮点型和字符型)、运算符(如`+`、`-`、`*`、`/`、`%`等)、分隔符(如`(`、`)`、`{`、`}`、`,`等)...

    python 实现最小覆盖子串

    返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 # 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 # 示例 1: # 输入:s = "ADOBECODEBANC", t = ...

    4.串和数组.ppt

    这里定义了一个名为StringDS的类,它包含一个字符数组data来存储字符序列,并提供了一些基本的字符串操作方法,如获取长度、比较字符串、截取子串、连接字符串、插入字符串、删除字符串以及查找字符串的位置。...

    substitute:“将字符串中的键替换为json的值

    代替将字符串中的键替换为json的值。安装npm i --save substitude包括import Substitute from 'substitude'初始化new Substitute(); 或者new Substitute(/{([^{]+)}/g, false, true, true); #参数# regex: regex ...

    java-leetcode题解之第76题最小覆盖子串.zip

    该问题要求找到一个字符串S中最小子串T,使得T包含原字符串S中的所有字符。这是一个经典的字符串处理问题,主要考察的是对字符串操作的理解以及如何有效地使用滑动窗口算法。 滑动窗口算法是一种处理数组或字符串...

Global site tag (gtag.js) - Google Analytics