检查输入字符串是否存在于自定义字符串表中

时间:2015-08-31 04:05:02

标签: algorithm data-structures

假设表中元素的长度为1或2。 表:{h,fe,na,o} 输入字符串:nafeo 输出:true

表:{ab,bc} 输入字符串:abc 输出:false

请告知我的以下代码将涵盖所有案例,这是最好的解决方案吗?或者我错过了什么,任何替代解决方案?

import java.util.*;

public class CustomTable {
Set<String> table = new HashSet<String>();

public CustomTable(){
    // add your elements here for more test cases
    table.add("oh");
    table.add("he");
}

public int checkTable( String prev, String curr, String next) {
    System.out.print(prev+":"+curr+":"+next);
    System.out.println();
    if (prev!=null) if (table.contains(prev)) return -1;
    if (table.contains(curr)) return 0;
    if (table.contains(next)) return 1;
    return 2;
}
// ohhe.
public static void main(String args[]) {
    CustomTable obj = new CustomTable();
    String inputStr = "ohheo"; //Tested ohe,ohhe,ohohe
    int result = 0;
    String curr, prev, next;
    for (int i = 0; i < inputStr.length(); i++) {
        // if prev element is found
        if (result==-1){
            prev = null;
        }
        else {
            if (i > 0) {
                prev = inputStr.substring(i - 1, i + 1);
            } else {
                prev = inputStr.substring(i, i + 1);
            }
        }
        curr = inputStr.substring(i,i+1);
        if (i < inputStr.length()-1) {
            next = inputStr.substring(i, i+2);
        } else {
            next = inputStr.substring(i, i+1);
        }
        result = obj.checkTable(prev, curr, next);

        if (result==2) {
            System.out.print("false");
            return;
        }
    }
    System.out.print("true");

}

}

1 个答案:

答案 0 :(得分:0)

我认为这个问题与众所周知的subset sum problem有相似之处,你可以通过一些自定义来使用它的解决方案。