我需要从文件中读取内容,并找到可以从文件中存在的其他单词形成的最长单词。文件中的单词以空格分隔。例如:
从文件输入:
This is example an anexample Thisisanexample Thisistheexample
输出:
Thisisanexample
注意:形成的最长单词是< code>Thisisanexample,而不是< code > this The example ,因为单词< code>the在文件中不是一个单独的单词。
使用简单数组可以做到这一点吗?我做了以下工作:
try{
File file = new File(args[0]); //command line argument for file path
br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = null;
//array for each word
String[] words = new String[] {};
while ((line = br.readLine()) != null){
words = line.split("\\s+"); //splitting the string with spaces
}
// array to store length of each word
int[] wordLength = new int[words.length];
for(int i = 0; i < words.length; i++){
wordLength[i] = words[i].length();
}
int currLength = 0; //store length of current word
int maxLength = 0; //store length of max word
String maxWord = null;
//checking each word with others at O(n*n) complexity
for (int i = 0; i < words.length; i++){
currLength = 0;
for (int j = 0; j < words.length && j != i; j++){
if (words[i].contains(words[j])){
currLength += wordLength[j];
}
}
System.out.println(currLength);
if(currLength > maxLength){
maxLength = currLength;
maxWord = words[i];
}
}
System.out.println(maxWord);
}
但如果子字符串中有子字符串,则此操作不起作用。它将为以下输入提供错误的输出:
This is example an anexample Thisisanexample Thisisanexample2
输出应该是Thisisample
,但它给出的是Thisisample2
。
在其他堆栈溢出线程的帮助下,我设法仅使用数组来做到这一点。
以下是解决方案:
import java.io.*;
import java.util.*;
public class LongestWord implements Comparator<String>{
//compare function to be used for sorting the array according to word length
public int compare(String s1, String s2) {
if (s1.length() < s2.length())
return 1;
else if (s1.length() > s2.length())
return -1;
else
return 0;
}
public static void main(String[] args){
BufferedReader br = null;
try{
File file = new File(args[0]);
br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = null;
//array for each word
String[] words = new String[] {};
while ((line = br.readLine()) != null){
words = line.split("\\s+"); //splitting the string with spaces
}
//sort the array according to length of words in descending order
Arrays.sort(words, new LongestWord());
/* start with the longest word in the array and check if the other words are its substring.
* If substring, then remove that part from the superstring.
* Finally, if the superstring length is 0, then it is the longest word that can be formed.*/
for (String superString: words) {
String current = new String(superString); // to store a copy of the current superstring as we will remove parts of the actual superstring
for (String subString: words) {
if (!subString.equals(current) && superString.contains(subString)) { // superstring contains substring
superString = superString.replace(subString, ""); // remove the substring part from the superstring
}
}
if (superString.length() == 0){
System.out.println(current);
break; // since the array is sorted, the first word that returns length 0 is the longest word formed
}
}
}
catch(FileNotFoundException fex){
System.out.println("File not found");
return;
}
catch(IOException e){
e.printStackTrace();
}
finally{
try {
if (br != null){
br.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
只需几行代码,您就可以使用regex找到候选的“组合”词,然后使用简单的逻辑找到最长的匹配:
String longest = "";
Matcher m = Pattern.compile("(?i)\\b(this|is|an|example)+\\b").matcher(input);
while (m.find())
if ( m.group().length() > longest.length())
longest = m.group();
除了要从文件中读取的代码并将 String 分配给变量输入
之外,这就是您需要的所有代码。
问题内容: 如何递归地查找字符串中最长的单词? 编辑 说完了,谢谢大家。这是修改后的代码。 问题答案: 首先,让我们假设句子字符串参数没有任何前导或尾随空格。您可以通过调用trim()来处理递归情况。 然后,我们需要定义两种情况,即基本情况和递归情况。 基本情况是找不到空格,即传入的句子只是一个单词。在这种情况下,只需返回句子即可。 在递归的情况下,我们将得到第一个单词,其余的则与您一样。在句子的
问题内容: 我需要在HTML源代码中找到一个单词。我还需要计算发生的次数。我正在尝试使用正则表达式。但它说找到0个匹配项。 我正在使用正则表达式,因为我认为这是最好的方法。如果有更好的方法,请告诉我。 我需要在HTML源代码中找到单词“ hsw.ads”的出现。 我已采取以下步骤。 但是计数是0; 请让我知道您的解决方案。 谢谢。帮助寻求者 问题答案: 您应该尝试一下。 在字符串中传递要搜索的单词
https://techdevguide.withgoogle.com/paths/foundational/find-longth-word-in-dictionary-that-subsecence-of-givised-string#代码-挑战 “给定一个字符串S和一组单词D,找出D中最长的单词,它是S的子序列。如果可以从S中删除一些字符(可能为零)以形成W,而不对其余字符重新排序,则W是S
本文向大家介绍找到字符串中最长的单词,并返回它的长度相关面试题,主要包含被问及找到字符串中最长的单词,并返回它的长度时的应答技巧和注意事项,需要的朋友参考一下 function findLongestWord(str){ // let arr=str.split(" "); let arr=str.replace(/[,|.|;]/," ").split(" "); let longLength=
本文向大家介绍程序查找可以由python中给定字母形成的最长单词的长度,包括了程序查找可以由python中给定字母形成的最长单词的长度的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个单词列表和一个称为字母的字符串,我们必须找到可以通过重新排列给定字母而得到的最长单词的大小。字母中可能有星号(*),它可以匹配任何字符。并且没有必要使用所有字母。 因此,如果输入像单词= [“ prince”,
http://articles.leetcode.com/2011/11/lengton-palindromic-substring-part-i.html 我处理这个问题的领域是用java编写代码,使用简单的强力解决方案,然后使用o(n2)方法,没有额外的空间,就像现在这样。http://www.geeksforgeeks.org/lengte-palindromic-substring-set
问题内容: 在字符串数组中找到最长的字符串有一种简便的方法吗? 像什么? 问题答案: var longest = arr.sort(function (a, b) { return b.length - a.length; })[0]; 可能更有效,但仅自Javascript 1.8 / ECMAScript5起可用,并且在较旧的浏览器中默认不可用:
问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?