汽水瓶_查找两个字符串a,b中的最长公共子串

举报
bug郭 发表于 2022/08/26 23:58:30 2022/08/26
【摘要】 汽水瓶汽水瓶import java.util.*;public class Main{ public static int fun(int x){ int result = 0;//保存结果数(换的饮料数) int ret = 0; //保存每次没换的空瓶数(余数) while(x>=3){ ret = x%3; result += x/3; ...

汽水瓶

汽水瓶

image-20220503234824759

import java.util.*;
public class Main{
   public static int fun(int x){
     int result = 0;//保存结果数(换的饮料数)
     int ret = 0; //保存每次没换的空瓶数(余数)
     while(x>=3){
      ret = x%3;
     result += x/3;
      //每次换完饮料 得到的 饮料 + 没换的空瓶 又是新的空瓶数
         x = x/3 + ret; 
     }
    //如果两个瓶子可以向老板借!   
   if(x==2){
   result++;
   }
  return result;
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
     int[] array = new int[10];
     int i = 0;
    while(sc.hasNext()){
      int ret = sc.nextInt();
     if(ret==0){
      break;
     }
    array[i++] = ret;
   }
    for(int j=0;j<i;j++){
    System.out.println(fun(array[j]));
   }
 }
}

image-20220504090149263

查找两个字符串a,b中的最长公共子串

查找两个字符串a,b中的最长公共子串

image-20220504092740520 image-20220504090212840

import java.util.*;
public class Main{
    public static String dphelp(String str1,String str2){
        String result = new String();
        int maxLen = 0;//保存最大长度值!
        int len1 = str1.length();
        int len2 = str2.length();
        int[][] dp = new int[len1+1][len2+1];
        //初始化: 初始化dp的时候已经全部初始化为0了可以不做处理!
       /* for(int i = 0;i< len1;i++){
            dp[i][0] = 0;
        }
        for(int i = 0;i< len2;i++){
            dp[0][i] = 0;
        } */
        //转移方程!
        for(int i = 1;i<=len1;i++){
            for(int j = 1;j<=len2;j++){
                if(str1.charAt(i-1)==str2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1]+1;
                    if(dp[i][j]>maxLen){
                        //更新最大值和结果!
                        maxLen = dp[i][j];
                        //substring(i,j) // [i,i)
                        result = str1.substring(i-maxLen,i);
                    }
                }
            }
        }
        return result;
    }
   public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        String str2 = sc.nextLine();
        int len1 = str1.length();
        int len2 = str2.length();
        if(len1>len2){//保证 str1是较短串!
            String tmp = str1;
            str1 = str2;
            str2 = tmp;
        }
        System.out.println(dphelp(str1,str2));
       }
}

相同题目,简化了 只需要返回最大长度即可!!!

[公共子串计算 ](

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。