# 每日一题算法： 2020年7月9日 面试题 17.13. 恢复空格 respace

## 2020年7月9日 面试题 17.13. 恢复空格 respace

class Solution {
public int respace(String[] dictionary, String sentence) {

}
}


    int[] res;
public int respace(String[] dictionary, String sentence) {

int max=Integer.MAX_VALUE;
res=new int[sentence.length()];
//初始化数组
for (int i=0;i<res.length;i++){
res[i]=max;
}

respace2(dictionary,sentence,0 );

return res[res.length-1];

}
public void respace2(String[] dictionary, String sentence,int index){

//从第一个字符开始遍历
for (int i=index;i<sentence.length();i++){

//看一下第一个字符是否存在直接匹配的单词，看一下有几个能匹配的
for (int j=0;j<dictionary.length;j++){
if(matchWord(dictionary[j],sentence ,i)){
if (i==0){
res[i+dictionary[j].length()-1]=0;
}
else if (res[i+dictionary[j].length()-1]>=res[i-1])
res[i+dictionary[j].length()-1]=res[i-1];
else
return;

respace2(dictionary,sentence ,dictionary[j].length()+i);

}
}

//判断当前字符的值的状态，是否是当前位置的最优值，如果不是，直接返回
if (i-1>=0&&res[i]>res[i-1]+1){
res[i]=res[i-1]+1;
}else if (i==0){
res[0]=1;
}else
return;
}

}
public boolean matchWord(String word,String sentence,int index){
int i=0;
for (;i+index<sentence.length()&&i<word.length()&&sentence.charAt(i+index)==word.charAt(i);i++);

if (i==word.length()){
return true;
}else
return false;

}


@Test
public void test(){
String[] dictionary={"tt","ttt","t","t"};
String sentence="tttttt";
System.out.println(respace(dictionary,sentence ));
}


int[] res;
public int respace(String[] dictionary, String sentence) {

if (dictionary.length==0)
return sentence.length();
if (sentence.equals(""))
return 0;

int max=Integer.MAX_VALUE;
res=new int[sentence.length()];
//初始化数组
for (int i=0;i<res.length;i++){
res[i]=max;
}

respace2(dictionary,sentence,0 );

return res[res.length-1];

}
public void respace2(String[] dictionary, String sentence,int index){

//从第一个字符开始遍历
for (int i=index;i<sentence.length();i++){

//看一下第一个字符是否存在直接匹配的单词，看一下有几个能匹配的
for (int j=0;j<dictionary.length;j++){

if(matchWord(dictionary[j],sentence ,i)){
if (i==0){
res[i+dictionary[j].length()-1]=0;
}
else if (res[i+dictionary[j].length()-1]>=res[i-1])
res[i+dictionary[j].length()-1]=res[i-1];
else
return;

respace2(dictionary,sentence ,dictionary[j].length()+i);

}
}

//判断当前字符的值的状态，是否是当前位置的最优值，如果不是，直接返回
if (i-1>=0&&res[i]>res[i-1]+1){
res[i]=res[i-1]+1;
}else if (i==0){
res[0]=1;
}else
return;
}

}
public boolean matchWord(String word,String sentence,int index){

//大于0，长度符合的情况下，如果字符的处理后的位置的值和前一个一样，那么比较就没有意义不比较，直接返回不匹配
if (index!=0&&index+word.length()<res.length&&res[index+word.length()-1]<=res[index-1]){
return false;
}

int i=0;
for (;i+index<sentence.length()&&i<word.length()&&sentence.charAt(i+index)==word.charAt(i);i++);

if (i==word.length()){
return true;
}else
return false;

}


07-09 64

07-09 47

07-09 95

07-09 55

#### (34)面试题 17.13. 恢复空格(e)

©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。