问题描述
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
问题演示
输入: pattern = “abba”, str = “dog cat cat dog”
输出: true
输入:pattern = “abba”, str = “dog cat cat fish”
输出: false
输入: pattern = “aaaa”, str = “dog cat cat dog”
输出: false
问题求解
6ms
public boolean wordPattern(String pattern,String s){
char[] cp = pattern.toCharArray();
String[] sp = s.split(" ");
if (cp.length==sp.length) {
for (int i = 0; i < cp.length; i++) {
for (int j = sp.length - 1; j > 0; j--) {
if (cp[i] == cp[j] && sp[i].equals(sp[j]) == false) {
return false;
}
if (cp[i] != cp[j] && sp[i].equals(sp[j])) {
return false;
}
}
}
}else
return false;
return true;
}
4ms
public boolean wordPattern(String pattern, String s) {
boolean flag = false;
char[] cp = pattern.toCharArray();
String[] sp = s.split(" ");
if (cp.length!= sp.length){
return false;
}
if (cp.length==1){
return true;
} else{
for (int i = 0; i < sp.length; i++) {
for (int j = sp.length-1; j > 0; j--) {
if (cp[i]==cp[j]){
if (sp[i].equals(sp[j])){
flag = true;
}else{
return false;
}
}else {
if (sp[i].equals(sp[j])){
return false;
}else
flag = true;
}
}
}
}
return flag;
}
2ms
public boolean wordPattern(String pattern,String s) {
char[] cp = pattern.toCharArray();
String[] sp = s.split(" ");
if (cp.length == sp.length) {
for (int i = 0; i < cp.length; i++) {
for (int j = i + 1; j < cp.length; j++) {
if (cp[i] == cp[j] && sp[i].equals(sp[j]) == false) {
return false;
}
if (cp[i] != cp[j] && sp[i].equals(sp[j])) {
return false;
}
}
}
} else
return false;
return true;
}
1ms
public boolean wordPattern(String pattern, String s) {
Map<Character, String> mp = new HashMap<>();
char[] cp = pattern.toCharArray();
String[] sp = s.split(" ");
if (cp.length!=sp.length){
return false;
}
for (int i = 0; i < cp.length; i++) {
if (!mp.containsKey(cp[i])){
if (!mp.containsValue(sp[i])){
mp.put(cp[i],sp[i]);
}else {
return false;
}
}else if (!mp.get(cp[i]).equals(sp[i])) {
return false;
}
}
return true;
}