290. Word Pattern
class Solution {
public boolean wordPattern(String pattern, String str) {
String[] strs=str.split(" ");
if(pattern.length()!=strs.length)
return false;
HashMap<Character,String> map1=new HashMap<>();
HashMap<String,Character> map2=new HashMap<>();
for(int i=0;i<pattern.length();i++)
{
char c=pattern.charAt(i);
if(map1.containsKey(c))
{
if(!map1.get(c).equals(strs[i]))
return false;
}
else
map1.put(c,strs[i]);
if(map2.containsKey(strs[i]))
{
if(!map2.get(strs[i]).equals(c))
return false;
}
else
map2.put(strs[i],c);
}
return true;
}
}
415. Add Strings
class Solution {
public String addStrings(String num1, String num2) {
int len1=num1.length(),len2=num2.length();
int len=Math.max(len1,len2)+1,a=0,b=0,flag=0;
int[] arr=new int[len];
for(int i=0;i<len;i++)
{
a=len1-i-1<0?0:num1.charAt(len1-i-1)-'0';
b=len2-i-1<0?0:num2.charAt(len2-i-1)-'0';
arr[len-i-1]=a+b+flag;
if(arr[len-i-1]>=10)
{
arr[len-i-1]-=10;
flag=1;
}
else
flag=0;
}
StringBuilder sb=new StringBuilder();
if(arr[0]==0)
{
for(int i=1;i<len;i++)
sb.append(arr[i]);
}
else
{
for(int i=0;i<len;i++)
sb.append(arr[i]);
}
return sb.toString();
}
}
306. Additive Number
class Solution {
public boolean isAdditiveNumber(String num) {
for(int len1=1;len1<num.length();len1++)
{
String s1=num.substring(0,len1);
if(len1>1 && s1.charAt(0)=='0')
break;
for(int len2=1;len2<num.length()-len1;len2++)
{
String s2=num.substring(len1,len1+len2);
if(len2>1 && s2.charAt(0)=='0')
break;
if(recursive(len1+len2,s1,s2,num))
return true;
}
}
return false;
}
public static boolean recursive(int start,String s1,String s2,String num)
{
if(start==num.length())
return true;
for(int len3=1;len3<=num.length()-start;len3++)
{
String s3=num.substring(start,start+len3);
if(len3>1 && s3.charAt(0)=='0')
break;
if(addTwoString(s1,s2).equals(s3) && recursive(start+len3,s2,s3,num))
return true;
}
return false;
}
public static String addTwoString(String num1, String num2) {
int len1=num1.length(),len2=num2.length();
int len=Math.max(len1,len2)+1,a=0,b=0,flag=0;
int[] arr=new int[len];
for(int i=0;i<len;i++)
{
a=len1-i-1<0?0:num1.charAt(len1-i-1)-'0';
b=len2-i-1<0?0:num2.charAt(len2-i-1)-'0';
arr[len-i-1]=a+b+flag;
if(arr[len-i-1]>=10)
{
arr[len-i-1]-=10;
flag=1;
}
else
flag=0;
}
StringBuilder sb=new StringBuilder();
if(arr[0]==0)
{
for(int i=1;i<len;i++)
sb.append(arr[i]);
}
else
{
for(int i=0;i<len;i++)
sb.append(arr[i]);
}
return sb.toString();
}
}