华为机试-公共字串计算

题目描述
题目标题:
计算两个字符串的最大公共字串的长度,字符不区分大小写
详细描述:
接口说明
原型:
int getCommonStrLength(char * pFirstStr, char * pSecondStr);
输入参数:
char * pFirstStr //第一个字符串
char * pSecondStr//第二个字符串

输入描述:
输入两个字符串

输出描述:
输出一个整数

输入例子:
asdfas werasdfaswer

输出例子:
6

效率低的Java程序实现:

  1. import java.util.Scanner;
  2. public class Main{
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Scanner sc = new Scanner(System.in);
  6. String str1 = "";
  7. String str2 = "";
  8. while(sc.hasNext()){
  9. str1 = sc.next();
  10. str2 = sc.next();
  11. System.out.println(getCommonStrLength(str1, str2));
  12. }
  13. }
  14. public static int getCommonStrLength(String str1, String str2){
  15. int len1 = str1.length();
  16. int len2 = str2.length();
  17. int[][] dp = new int[len1+1][len2+1];
  18. for(int i=0;i<=len1;i++){
  19. for(int j=0;j<=len2;j++){
  20. dp[i][j] = 0;
  21. }
  22. }
  23. for(int i=1;i<=len1;i++){
  24. for(int j=1;j<=len2;j++){
  25. if(str1.charAt(i-1) == str2.charAt(j-1)){
  26. dp[i][j] = dp[i-1][j-1] + 1;
  27. }else{
  28. dp[i][j] = 0;   //区别在这儿
  29. }
  30. }
  31. }
  32. int max = 0;
  33. for(int i=0;i<=len1;i++){
  34. for(int j=0;j<=len2;j++){
  35. if(max < dp[i][j])
  36. max = dp[i][j];
  37. }
  38. }
  39. return max;
  40. }
  41. }

效率低的Java程序实现:

  1. import java.util.Scanner;
  2. /**
  3. * 华为机试公共字串计算
  4. *
  5. * @author LiJian 传统方法是对短的字符串从头进行遍历,选择不同的起点来进行遍历找到公共字串
  6. *
  7. *         我想的是利用字符串的contain方法来寻找字串,效率会略微高点
  8. */
  9. public class Main {
  10. public static void main(String[] args) {
  11. Scanner sc = new Scanner(System.in);
  12. while (sc.hasNext()) {
  13. String pFirstStr = sc.next();
  14. String pSecondStr = sc.next();
  15. int num = pFirstStr.length() > pSecondStr.length() ? getCommonStrLength(pFirstStr, pSecondStr)
  16. : getCommonStrLength(pSecondStr, pFirstStr);
  17. System.out.println(num);
  18. }
  19. }
  20. private static int getCommonStrLength(String pFirstStr, String pSecondStr) {
  21. int start = 0;
  22. int end = pSecondStr.length() - 1;
  23. int max = 0;
  24. for (; start < pSecondStr.length(); start++) {
  25. if (max > pSecondStr.substring(start).length()) {
  26. break;
  27. }
  28. if (pFirstStr.contains(pSecondStr.substring(start))) {
  29. max = pSecondStr.substring(start).length();
  30. continue;
  31. }
  32. for (int j = end; j > start; j--) {
  33. if (j - start <= max) {
  34. break;
  35. }
  36. if (pFirstStr.contains(pSecondStr.substring(start, j))) {
  37. max = j - start;
  38. break;
  39. }
  40. }
  41. }
  42. return max;
  43. }
  44. }
时间: 2024-08-10 23:15:45

华为机试-公共字串计算的相关文章

华为机试:字串的连接最长路径查找

这个题更应该叫做字符串字典序排序 题目描述 给定n个字符串,请对n个字符串按照字典序排列. 输入描述: 输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母. 输出描述: 数据输出n行,输出结果为按照字典序排列的字符串. 示例1 输入 9 cap to cat card two too up boat boot 输出 boat boot cap card cat to too two up Java:傻子似的,重写Arrays.sor

华为OJ: 公共字串计算

有几个需要注意的地方,一个这道题是不区分大小写的,所以在计算之前对输入的字符串要做小写或者大写的转换. 第二个,思路一定要清晰,先将s1从[i]处开始与s2的[j]开始匹配,不相等则j++直到j等于s2.length()-1,相等,则i++,j++.注意,这里就是i++,即下次重新开始从s[i]开始匹配时,两次i之间的距离可能会超过1.再j那里设置一个计数器计数即可. import java.util.Scanner; public class findMaxSubStringLength {

华为OJ——公共字串计算

题目描述 题目标题: 计算两个字符串的最大公共字串的长度,字符不区分大小写 详细描述: 接口说明 原型: int getCommonStrLength(char * pFirstStr, char * pSecondStr); 输入参数: char * pFirstStr //第一个字符串 char * pSecondStr//第二个字符串 输入描述: 输入两个字符串 输出描述: 输出一个整数 输入例子: asdfas werasdfaswer 输出例子: 6 import java.util.

公共字串计算——String.regionMatches方法 &amp; Java标签

题目:输入两个字符串,计算两个字符串的最大公共字串的长度,并输出,字符不区分大小写 eg:输入abcde  xxxBcyyy,输出 2. 完整Java代码: import java.util.*; public class Main { public static void main(String arg[]){ Scanner s=new Scanner(System.in); String str1=s.next(); String str2=s.next(); s.close(); Str

公共字串计算

import java.util.Arrays; import java.util.Scanner; public class GetCommonString { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str1 = scan.next().toLowerCase(); String str2 = scan.next().toLowerCase(); if(str

华为測试 公共子串计算

题目标题: 计算两个字符串的最大公共字串的长度,字符不区分大写和小写 输入两个字符串 输出一个整数 案例输入:asdfas werasdfaswer 案例输出:6 #include<iostream> #include<string> using namespace std; int main() { string str1,str2,temp; int m,MaxNum=0,Len; cin>>str1>>str2; string::size_type i

搜索里的相似度计算-最长公共字串

相似度计算的任务是根据两段输入文本的相似度返回从0到1之间的相似度值:完全不相似,则返回0,:完全相同,返回1.衡量两端文字距离的常用方法有:海明距离(Hamming distance),编辑距离,欧氏距离,文档向量的夹角余弦距离,最长公共字串. 1. 余弦相似度 把两篇文档看作是词的向量,如果x,y为两篇文档的向量,则:Cos(x, y) = (x * y) / (||x|| * ||y||) 使用Hashmap可以很方便的把这个计算出来 2. 最长公共字串(Longest Common Su

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

[华为机试]输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。

//输入数字的汉语拼音,每个拼音的首字母大写.输出该数字的阿拉伯数字. //JiuBaiJiuShiJiu -> 999 #include<stdio.h> #include<string.h> int result = 0; void add(int n,char wei[]) { if(strcmp(wei,"Wan") == 0) result = result + n * 10000; else if(strcmp(wei,"Qian&q