LIST_找出链表的共同后缀

问题描述:单词每个字母用链表存储,找出两个单词的相同最长后缀,入loading和being

解决思路:分别计算两个单词的长度m和n,然后让长的单词先后移动m-n位后在一一比较

代码如下:

package mango.list;

import mango.list.P038Test21.Node;

/**
 * 课后练习22题
 * @since 2016/10/21
 * @author mango
 * @descripe 单词每个字母用链表存储,找出两个单词的相同最长后缀,入loading和being
 */
public class P038Test22 {
    public static void main(String[] args) {
        //构造单词
        Node word1 = new Node();
        Node word2 = new Node();
        word2.date = "a";
        word1.link = word2;
        Node word3 = new Node();
        word3.link = word2;
        System.out.println(solve(word1,word3));
    }
    /**
     * 算法核心代码
     * @param str1
     * @param str2
     * @return
     *
     * 分别计算两个单词的长度m和n,然后让长的单词先后移动m-n位后在一一比较
     */
    public static String solve(Node str1,Node str2){
        int str1len = 0;
        int str2len = 0;
        Node temp1 = str1;
        Node temp2 = str2;
        //计算str1的长度
        while(temp1!=null){
            temp1 = temp1.link;
            str1len++;
        }
        //计算str2的长度
        while(temp2!=null){
            temp2 = temp2.link;
            str2len++;
        }
        int longerMove = str1len-str2len>0 ? str1len-str2len:str2len-str1len;
        //将较长的单词先指针后移
        if(str1len>str2len){
            while(longerMove>0){
                str1 = str1.link;
                longerMove--;
            }
        }else{
            while(longerMove>0){
                str2 = str2.link;
                longerMove--;
            }
        }
        str1 = str1.link;
        str2 = str2.link;
        //比较
        while(str1.date!=null && !str1.date.equals(str2.date)){
            str1 = str1.link;
            str2 = str2.link;
        }
        return str1.date;
    }
    
    //结点的定义
    public static class Node{
        String date;
        Node link;
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值