首页 > 其他分享 >统计文本文件的最长子串的长度

统计文本文件的最长子串的长度

时间:2023-03-05 18:46:42浏览次数:36  
标签:子串 newwords String int s1 文本文件 new 最长 wordschainindex

public class test_a {
    public static void main(String[] args) throws IOException {

        String path = "F:/piao.txt";
        FileInputStream fis = new FileInputStream(path);
        InputStreamReader inputStreamReader = new InputStreamReader(fis, "GBK");
        char[] chars = new char[1024];
        String content= "";
        while (inputStreamReader.read(chars) > 0 ) {
            content += new String( chars );
        }
        int addyuansu=0;
        //2.依次取出首位字母存入数组中
        String[] newwords=new String[100000];//去重后的单词数组
        String[] wordschain=new String[100000];
        int wordschainindex=0;
        int[] wordsmaxlen=new int[100000];
        String[] words = content.split("[^(a-zA-Z)]+");
        Set<String> set  =new HashSet<String>();
        for(int i=0;i<words.length;i++)
        {
            //System.out.println(words[i]);
            if (!words[i].equals("")&&words[i].length()>0&&words[i]!=null)
            {
                boolean add = set.add(words[i]);
                if(add){
                    newwords[addyuansu++]=words[i];
                }
            }

        }

       //3.依次比较第一个单词和第二个单词的字母

        for(int i=0;newwords[i]!=null;i++)
        {
            wordschain[wordschainindex++]=newwords[i];
            String s1 = wordschain[wordschainindex - 1];
            int count=0;
            for(int j=i+1;newwords[j]!=null;j++){
                if(s1.charAt(s1.length()-1)==newwords[j].charAt(0))
                {
                    s1=s1+" ";
                    s1+=newwords[j];
                    count++;
                }

            }
            wordsmaxlen[wordschainindex-1]=count;
            wordschain[wordschainindex-1]=s1;
        }
        int maxlen=0;
        for(int k=0;k<wordschainindex-1;k++)
        {
            if(wordsmaxlen[k]>=maxlen)
            {
                maxlen=wordsmaxlen[k];
            }
        }
        String[] strings = wordschain[maxlen].split(" ");
        System.out.println("最长子链是");
        for (String s:strings)
        {
            System.out.println(s);
        }


    }

}

  总结:问题比较简单,主要是先从文件中读出字符串,然后将字符串存入HashMap之中,避免重复,然后依次比较第一个单词的最后一个和第二个单词的第一个,最后得出结果



标签:子串,newwords,String,int,s1,文本文件,new,最长,wordschainindex
From: https://www.cnblogs.com/yhkdw/p/17181264.html

相关文章

  • 计算最长英语单词链
    课堂练习题目:计算最长英语单词链。一、题目内容:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写一个程序,快速找出最长的......
  • 计算英语文本中首尾接龙最长数量
    publicclassTest1{publicstaticvoidmain(String[]args)throwsIOException{//TODO自动生成的方法存根Stringfilename="E:\\123......
  • P2679 [NOIP2015 提高组] 子串
    两个仅包含小写英文字母的字符串AA和BB。现在要从字符串AA中取出kk个互不重叠的非空子串,然后把这kk个子串按照其在字符串AA中出现的顺序依次连接起来得到一个......
  • 计算最长英语单词链
    大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最......
  • 课堂练习——计算最长单词链
      packageletteron;importjava.io.*;importjava.util.*;publicclasstext1{publicstaticvoidmain(String[]args)throwsFileNotFoundException......
  • 课堂练习01题目:计算最长英语单词链
    大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最......
  • 1405. 最长快乐字符串 (Medium)
    问题描述1405.最长快乐字符串(Medium)如果字符串中不含有任何'aaa','bbb'或'ccc'这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数a,b,c......
  • 3. 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度......
  • 最长不下降子序列
      思路:利用线段树求出a[i](以下表i所在数为结尾的最长不下降序列),然后刷新线段树,从大到小重新放入线段树,求出区间(i+k+1~n)之间最大的不下降子序列。代码点击......
  • BZOJ 2870 最长道路
    BZOJ2870最长道路题意给定一棵\(n\)个节点的树,求树上一条链,使得链的长度乘链上所有点中最小权值所得的积最大\(n\le5\times10^4\)链长度是链上点的个数题面做......