250. 特殊回文字符串
有一个双向配对的字母列表,比如:a<->t, b<->y, y<->h, h<->n, m<->w, w<->w …
给定一个字符串,如果它是回文字符串,返回true。其中的字母可以被另一个对应的字母替换,但不允许嵌套替换,即a<-->b, b<-->c, 但a<-/->c。
例如,字符串 “swims” 返回true,因为“w”可以被“m”替换,而字符串会变成“smims”,是回文字符串。
字符串 “hob” 也返回true,因为“h”可以被“y”替换,“b”也可以被替换为“y”。然后字符串"yoy"也是回文。
但是,字符串 “ban” 返回false,因为嵌套替换是不允许的。即使“b“可以变成“y“,“n“可以变成“h“,新的字符串“yah“也不是回文。
样例
示例1:
输入:ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="swims"
输出:true
说明:“w”可以被“m”代替后字符串变成了“smims”,其是回文字符串,因此返回true。
示例2:
输入: ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="hob"
输出:true
说明:“h”可以用“y”代替,“b”也可以用“y”代替。那么这个字符串变成”yoy”,是回文字符串,因此返回true。
示例3:
输入:ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="ban"
输出:false
说明:不允许嵌套替换。即使”b”可以变成”y”,”n”可以变成”h”,新的字符串”yah”也不是回文。
注意事项
列表ambigram中的每一位均为2个字母,代表其可以相互转换。
列表ambigram的长度不超过10,000
字符串word的长度不超过1,000
数据保证均为小写字母。
public class Solution {
/**
* @param ambigram: A list of paired ambigram letter.
* @param word: A string need to be judged.
* @return: If it is special palindrome string, return true.
*/
public boolean ispalindrome(List<String> ambigram, String word) {
// write your code here.
char[] chars=word.toCharArray();
for (int i=0;i< chars.length/2;i++){
if (chars[i]!=chars[chars.length-i-1]){
String temp=chars[i]+"";
String temp2=chars[chars.length-i-1]+"";
boolean flag=false;
StringBuilder sum1= new StringBuilder();
StringBuilder sum2= new StringBuilder();
for (int j = 0; j < ambigram.size(); j++) {
String s=ambigram.get(j);
if (s.contains(temp) && s.contains(temp2)){
flag=true;
break;
}else if (s.contains(temp)){
String s1=s.replaceFirst(temp, "");
sum1.append(s1);
if (sum2.toString().contains(s1)){
flag=true;
break;
}
}else if (s.contains(temp2)){
String s1=s.replaceFirst(temp2, "");
sum2.append(s1);
if (sum1.toString().contains(s1)){
flag=true;
break;
}
}
}
if (!flag)
return false;
}
}
return true;
}
}