查找使用 String 中的给定单词形成的最长链的长度

Find the length of longest chain formed using given words in String

Okk 作为程序员,我们喜欢参与逻辑构建,但有时我们会因为下面提到的某种类型的谜题而变得空白。让我声明,这不是任何类型的家庭作业或工作内容,它只是一种逻辑和性能练习 puzzle.Okk 给定一个 String</code>s 的谜题,用逗号分隔的单词,例如 </p> <pre><code>String S= peas,sugar,rice,soup

现在的关键是找出单词的最长链的长度,例如单词的最后一个字符应该是下一个单词的第一个字符等等,以创建可能的最长链,最后计算该链的长度。

现在我试图找出某种解决方案,例如

  1. 用逗号分隔 string
  2. 将它们添加到 list
  3. 排序 list 等等

但是现在如何开发进一步的逻辑因为我在逻辑开发方面有点差劲,感谢帮助,如果超过一半的逻辑不正确,那么它应该是什么必须简单排序和完美的方法来获得长度最长的单词链。

总结
输入: String S= peas,sugar,rice,soup.
输出: 4个词的长度(peas->sugar->rice->soup) or (soup->peas->sugar->rice) etc

一旦你有了列表(或数组),你可以遍历数组检查你的条件(第 n 个单词的最后一个字母与第一个单词的第一个字母相等)并每次增加计数器。一旦条件为假,就退出循环。您的柜台将持有您需要的价值。

初始化名为 last(String last=" ") 的“”字符串

用逗号分割得到第一个字符串

对字符串的最后一个字符进行子串并将其存储到last

boolean brokenchain=false;
length=0;
while(more string to split with comma)&&(!brokenchain){
     split string with comma
     substring to get first char
     if(first char!=last){
        brokenchain=true;
      }else{
         length++;
         get last char of this string with substring and store it to last
      }   
}

如果您要输入一个长度为 5 的序列,但它中断了,并且有一个长度为 6 的序列,您希望对其进行计数并打印为输出,则必须将计数变量存储在映射中,因为例如,作为与序列关联的键。然后你继续循环(你必须再次使 brokenchain=false )直到输入字符串序列结束。然后你从你的地图中得到更大的键并用他的相关值(最大序列)打印它

我想你需要找出最大和最小的数字。

  1. 用逗号分割字符串

  2. 将它们添加为 list_item

  3. 比较list_item1和list_item2,最大值变成list_item_X

  4. 比较list_item3和list_item4,最大值变为list_item_Y 现在比较list_item1和list_item_X,最大值变成

  5. 所以最大值是list_item_Z,这里通过代码实现。

$s = 'peas,sugar,rice,soup';
$list_items = explode(',', $s);
$lengths = array_map('strlen', $list_items);
echo "The shortest is " . min($lengths) . ". The longest is " . max($lengths);

okk朋友们,我做的逻辑和核心部分,我的谜题已经解决了

import java.util.Map;
import java.util.Stack;

public class CandidateCode 
{ 
public static int chainLength=0;
public static void main(String[] args) {
    String s= "peas,sugar,rice,soup";
    int chainLengthfinal=wordChain(s);
    System.out.println("final length:"+chainLengthfinal);
}
public static int wordChain(String input1)
{
    List<String> stringList = new ArrayList<String>();
    stringList= Arrays.asList(input1.split(","));
    boolean ischain = new CandidateCode().hasChain(stringList);
    if (ischain) {
     return chainLength;    
    }
    return 0;

}
Map<Character, List<String>> startsWith = new HashMap<Character, List<String>>();
Map<Character, List<String>> endsWith = new HashMap<Character, List<String>>();

private Character getFirstChar(String str) {
    return str.charAt(0);
}

private Character getLastChar(String str) {
    return str.charAt(str.length() - 1);
}

boolean hasChain(List<String> stringList) {
    for (String str : stringList) {
        Character start = getFirstChar(str);
        Character end = getLastChar(str);
        List<String> startsWithList;
        List<String> endsWithList;

        if (startsWith.containsKey(start)) {
            startsWithList = startsWith.get(start);
        } else {
            startsWithList = new ArrayList<String>();
            startsWith.put(start, startsWithList);
        }

        if (endsWith.containsKey(end)) {
            endsWithList = endsWith.get(end);
        } else {
            endsWithList = new ArrayList<String>();
            endsWith.put(end, endsWithList);
        }
        startsWithList.add(str);
        endsWithList.add(str);
    }

    Stack<String> stringStack = new Stack<String>();
    for (String str : stringList) {
        if (hasChain(stringList.size(), str, stringStack)) {
            System.out.println(stringStack);
            System.out.println("size "+stringStack.size());
            chainLength= stringStack.size();
            return true;
        }
    }

    return false;
}

private boolean hasChain(int size, String startString, Stack<String> stringStack) {
    if (size == stringStack.size()) return true;
    Character last = getLastChar(startString);
    if (startsWith.containsKey(last)) {
        List<String> stringList = startsWith.get(last);
        for (int i = 0; i < stringList.size(); i++) {
            String candidate = stringList.remove(i--);
            stringStack.push(candidate);
            if (hasChain(size, candidate, stringStack)) {
                return true;
            }
            stringStack.pop();
            stringList.add(++i, candidate);
        }
    }

    return false;
 }
}

以上程序的输出将是
[汤、豌豆、糖、米饭]

尺寸4.

最终长度:4.