【问题标题】:Unravel the string [closed]解开字符串[关闭]
【发布时间】:2013-07-20 07:03:30
【问题描述】:

如何使用提供的单词列表解开字符串。

例如:

List of words in Dictionary:

Hi
Hello
Welcome
to
Stack
Overflow

Input String:

WelcometoStackOverflow

Output must be (with space added):

Welcome to Stack Overflow

对于列表中不存在的单词,应打印NULL

Input String:

StackOverflowWelcomeYou

Output must be:

NULL

任何建议或想法如何实施...??

【问题讨论】:

  • 首先,请确定语言。其次,请通过尝试自己执行此操作并发布您拥有的代码来展示一些努力。
  • 第三,更准确地描述问题。
  • 可以假设输入为驼峰式(以大写字母开头)。

标签: java string algorithm


【解决方案1】:

最大的挑战是如何分解输入字符串,所有答案/cmets 将基于一些假设,直到 OP 提供更多细节。

在这个答案中假设输入是首字母大写的驼峰式字符串

public class CheckDict {
    static Set<String> dict = new HashSet<String>(Arrays.asList(new String[] 
                              {"Hi", "Hello", "Welcome", "To", "Stack", "Overflow"}));

    public static void main(String[] args) {
        System.out.println("Test 1: " + findDict("WelcomeToStackOverflow"));
        System.out.println("Test 2: " + findDict("StackOverflowWelcomeYou"));
    }

    static String findDict(String str) {
        // split the string when we encounter an upper case letter except at start
        String[] arr = str.split("(?<!^)(?=[A-Z])");
        StringBuilder output = new StringBuilder(arr[0]);
        for (int i=1; i< arr.length; i++) {
            if (!dict.contains(arr[i]))
                return null;
            else
                output.append(' ').append(arr[i]);
        }
        return output.toString();
    }
}

输出:

Test 1: Welcome To Stack Overflow
Test 2: null

【讨论】:

    【解决方案2】:

    这是我将采取的解决算法的方法。

    1) 将字典加载到哈希映射结构中进行摊销常数时间查找,或加载到有序映射中进行对数时间查找

    2) 遍历可能的子字符串 [0, i] 直到在字典中找到匹配项

    a) 如果找到匹配项,则从输入字符串中删除该单词并存储在 ArrayList 结构中以报告最终答案

    b) 如果未找到匹配项或 i 等于字符串的大小则报告 null

    3) 遍历你的字符串数组列表并打印一个空格分隔的列表

    取决于查找时间,我们称之为 L,这个算法应该花费 O(n * L),其中 n 是输入字符串中的字符数。如果查找需要摊销的常数时间,例如哈希映射,那么它将是 O(n),否则你可以在 O(n log D) 中完成。其中 D 是字典的大小。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2016-02-02
      相关资源
      最近更新 更多