输入: "tableapplechairtablecupboard..."很多单词
将这样的文本拆分为单词列表并得到的有效算法是什么?
输出: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...]
想到的第一件事就是要经历所有可能的单词(从第一个字母开始)并找到最长的单词,继续 position=word_position+len(word)
PS
我们列出了所有可能的单词.
单词"橱柜"可以是"杯子"和"板子",选择最长.
语言:python,但主要的是算法本身.
简而言之 - 我想将这里问题的第一个答案从 Python 转换为 C#。我目前拆分连接词的解决方案是指数级的,我想要一个线性解决方案。我假设输入文本中没有间距和一致的大小写。
我希望使用 C# 将诸如“wickedweather”之类的连体字符串转换为单独的词,例如“wicked weather”。我已经创建了一个有效的解决方案,一个使用指数时间的递归函数,这对于我的目的来说根本不够有效(处理至少 100 多个连接词)。到目前为止,我已经阅读了这些问题,我认为这些问题可能会有所帮助,但我无法将他们的回答从 Python 转换为 C#。
这适用于只想在 C# 中拆分几个单词(< 50)并且并不真正关心效率的人。
我当前的解决方案计算出所有可能的单词组合,找到最可能的输出并显示。我目前将最可能的输出定义为使用最长单个单词的输出 - 我更喜欢使用不同的方法。这是我当前的解决方案,使用递归算法。
static public string find_words(string instring)
{
if (words.Contains(instring)) //where words is my dictionary of words
{
return instring;
}
if (solutions.ContainsKey(instring.ToString()))
{
return solutions[instring];
}
string bestSolution = "";
string solution = "";
for (int i = 1; i < instring.Length; i++)
{
string partOne = find_words(instring.Substring(0, i)); …Run Code Online (Sandbox Code Playgroud)