题目描述:
输入多个字符串,条件:字符串是由键盘上的某一行字母组成的。将满足的字符串输出。
public class Solution {
public String[] findWords(String[] words) {
String[] data = new String[]{"qwertyuiop","asdfghjkl","zxcvbnm"};
ArrayList<String> myData = new ArrayList<String>();
for(int i=0;i<words.length;i++)
if(contain(words[i], data[0])>0 || contain(words[i], data[1])>0 || contain(words[i], data[2])>0 ){
myData.add(words[i]);
}
// ArrayList转为数组
return myData.toArray(new String[myData.size()]);
}
// 判断子串里的字符是否全在父串中,忽略大小写
public int contain(String son,String parent){
String lson = son.toLowerCase();
String lparent = parent.toLowerCase();
for(char c: lson.toCharArray()){
if(lparent.indexOf(c)==-1)
return 0;
}
return 1;
}
}
关于子串里的字符是否全在父串里,自己的另外写法:
// 字符串转小写,排序,去掉相同的字符
public String getSortedCharNotsame(String from){
String lower = from.toLowerCase();
char[] t = lower.toCharArray();
Arrays.sort(t);
// 去掉字符数组中相同的字符
int sameNum=0;
for(int i=1;i<t.length;i++){
if(t[i]==t[i-1])
sameNum++;
t[i-sameNum]=t[i];
}
// 字符数组转字符串
String to = new String(t).substring(0, t.length-sameNum);
return to;
}
// 判断子串里的字符是否全在父串中
public int contain(String son,String parent){
String t1 = getSortedCharNotsame(son);
String t2 = getSortedCharNotsame(parent);
int j=0;
for(int i=0;i<t1.length();i++){
while(j<t2.length()-1 && t1.charAt(i)>t2.charAt(j)){
j++;
}
if( t1.charAt(i)!=t2.charAt(j) )
return 0;
}
return 1;
}