如何创建函数WordSplit(strArr)使用dart读取存储在strArr中的字符串数组

iyzzxitl  于 2023-03-05  发布在  其他
关注(0)|答案(3)|浏览(79)

我在Coderbyte中做了一个简单的练习,它只是想让一个函数WordSplit(strArr)读取存储在strArr中的字符串数组,例如,我有两个元素,如["hellocat","apple,bat,cat,goodbye,hello,yellow,why"]
我只想确定输入中的第一个元素是否可以拆分为两个单词,其中两个单词都存在于第二个输入中提供的字典中。
例如:第一元素可以被分成两个词:hello和cat因为这两个词都在字典里。
因此,程序应该返回字典中存在的两个单词(用逗号分隔),作为结果hello,cat

blpfk2vs

blpfk2vs1#

下面我做了一个递归的解决方案,它检查要拆分的字符串是否以字典中的任何单词开头,如果存在,则使用去掉第一个单词的子字符串再次调用函数。
这个函数只对第一个不在字典中的单词起作用,因为当输入的单词不是由字典中的单词组成时,你没有指定预期的行为。你可以让它抛出一个异常,但是请指定你的预期。

void main() {
  print(wordSplit(["hellocat", "apple,bat,cat,goodbye,hello,yellow,why"]));
  //hello,cat
}

String wordSplit(List<String> arg) {
  String wordToSplit = arg[0];
  String dict = arg[1];
  List<String> parsedDict = arg[1].split(',');
  
  for(String word in parsedDict) {
    if(wordToSplit.startsWith(word)) {
      //If the substring would be empty, don't do more recursion
      if(word.length == wordToSplit.length) {
        return word;
      }
      return word + ',' + wordSplit([wordToSplit.substring(word.length), dict]);
    }
  }
  return wordToSplit;
}
yiytaume

yiytaume2#

#include <bits/stdc++.h>

using namespace std;

vector<string> converToWords(string dict) {

    vector<string> res;
    string s = "";
    int n = dict.length();
    for(int i=0; i<n; i++) {
        if(dict[i] == ',') {
            res.push_back(s);
            s = "";
        }
        else s += dict[i];
    }
    res.push_back(s);
    s = "";
    return res;
}

string solve(string str[]) {

    string result = "";
    string word = str[0], dict = str[1];
    int n = word.length();
    vector<string> vs = converToWords(dict);
    unordered_set<string> ust;
    for(auto it: vs) ust.insert(it);
    // for(auto i=ust.begin(); i!=ust.end(); i++){
    //     cout<<*i<<endl;
    // }
    string s = "";
    for(int i=0; i<n; i++) {
        s += word[i];
        // cout<<s<<endl;
        string temp = word.substr(i+1, n-(i+1));
        // cout<<temp<<endl;
        if(ust.find(s) != ust.end() && ust.find(temp) != ust.end()) {
            cout<<s<<endl;
            cout<<temp<<endl;
            result += s+","+temp;
            break;
        }
        temp = "";
    }
    return result;
}

int main() {

    string arr[2];
    cin>>arr[0]>>arr[1];
    cout << solve(arr);
    return 0;
}
5sxhfpxr

5sxhfpxr3#

我昨天已经做过了,下面的算法会给予你需要的答案

String wordSplit(List arg) { 

      String wordToSplit = arg[0];
      String searchWords = arg[1];
      List<String> searchList = searchWords.split(',');
  
      for(String word in  searchList){
         if(wordToSplit.startsWith(word)){
                  if(word.length == wordToSplit.length){
                      return word;
                  }
                  //Check if word found is at least half the word to 
                  //split length
                  if(word.length >= wordToSplit.length / 2){
                     return word + ',' + wordSplit([wordToSplit.substring(word.length), searchWords]); 
              }
              
          } 
  }
  
  return arg[0];
}

相关问题